测试场景下如何生成时间戳格式的随机单据号?
实现时间戳格式的单据号
没问题,我来帮你把原来的Guid生成逻辑改成时间戳格式~根据测试场景的不同,你可以选下面几种常见的实现方式:
1. 秒级Unix时间戳
这种是从1970年1月1日UTC到当前时间的总秒数,格式是纯数字串,简洁易读:
// 生成秒级Unix时间戳字符串 var DocumentNo = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); editCasePage.FillDocumentNumber(DocumentNo);
2. 毫秒级Unix时间戳
如果测试并发较高,秒级可能出现重复,换成毫秒级会更精准,几乎不会重复:
// 生成毫秒级Unix时间戳字符串 var DocumentNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); editCasePage.FillDocumentNumber(DocumentNo);
3. 带日期信息的可读时间戳
如果需要单据号包含直观的日期信息(比如年月日时分秒),可以用自定义日期格式化字符串,这种格式可读性强,加上毫秒后也能保证唯一性:
// 格式示例:20240520143522123(年月日时分秒毫秒) var DocumentNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"); editCasePage.FillDocumentNumber(DocumentNo);
注意:如果你的测试环境是多时区部署,建议用
DateTime.UtcNow代替DateTime.Now,避免时区差异导致的时间偏差。
如果担心极端并发下毫秒级仍有重复,可以在时间戳后面加一段短随机数,进一步降低重复概率:
var timePart = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); var randomPart = new Random().Next(10, 99).ToString(); var DocumentNo = $"{timePart}{randomPart}"; editCasePage.FillDocumentNumber(DocumentNo);
内容的提问来源于stack exchange,提问作者Mutu Arron
相关产品推荐
相关产品推荐

