在之前文章(如何使用思维导图更高效的设计测试用例?)提到了使用正则表达式帮助我们测试,这里就简单介绍下,只是说出我的经验而已,也请看到文章的朋友多指正~
在软件系统中,很多地方都会用到正则表达式,对于这种功能的测试,其实更多的就是测试其正则表达式的有效性,以下就我的经验列出了几个场景以及介绍下如何快速的对正则表达式进行测试。
讲解正则表达式的文章可以参考:http://deerchao.net/tutorials/regex/regex.htm
在线正则表达式测试:http://www.ostools.net/regex
1.校验邮箱地址密码等数据格式
校验数据格式的合法性是正则表达式的一项最常用的功能,正则表达式是一种形式化的字符串描述方法,只需要很少的代码就可以描述需要用到的字符串格式.
校验邮箱地址格式:
例如:6~18个字符,可使用字母、数字、下划线,需以字母开头
需要覆盖的用例:
1)输入长度19位邮箱地址
2)输入长度为6位的邮箱地址
3)输入长度为5位的邮箱地址
4)输入20位的邮箱地址
5)输入@前很短的满足长度要求的邮箱地址
6)输入短域名的满足长度要求的邮箱地址
7)输入@后域名较长的满足长度要求的邮箱地址
8)输入带‘_’的正常邮箱地址
9)输入含其他特殊字符的邮箱地址
10)输入数字开头的邮箱地址
11)输入下划线开头的邮箱地址
是否还是担心覆盖不全面呢?是否还有下划线在开头或末尾的情况?是否还有首位字母其余全数字的邮箱地址呢?还有大小写的情况呢?等等!
如果你理解了正则表达式,会让你放心很多了:
^[a-zA-Z]\w*@\w*(\.\w*){1,3}$
上面的正则表达式除了字符长度不好处理外,其余的情况都包括了,讲解一下:
^[a-zA-Z]:^匹配开始的字符串,即以字母开头不区分大小写
\w*:匹配0个或多个字母或数字或下划线
@:邮箱地址必不可少的符号
(\.\w*){1,3}:包含1~3个格式类似为.com的内容,包含了字母数字或下划线,例如yahoo.com.cn,z.cn的域名直接秒杀
$:匹配结束的字符串,这里即是以类似.com格式结束的内容
密码,身份证号码及URL中参数值等等的校验都是基于正则表达式的应用,以后再碰到类似的应用可以不用再琢磨case覆盖度是否够不够了,直接测试正则表达式会更高效喔。
对于文本或html文件按照特定的格式进行解析以提取重要信息,都是基于强大的正则表达式进行的开发,在招聘领域一个非常好的应用就是简历解析,可以把各个渠道的简历在一个系统中进行标准化管理易于检索,这就需要把不同格式的简历解析成对应的内容存储到数据库中,就很好的利用了正则表达式强大的功能。
这里,至少需要考虑到的功能测试用例:
1)使用任意撰写的文本格式的简历进行解析
2)使用各个招聘平台的简历进行解析,如智联招聘,前程无忧,赶集等等,需要比较庞大的简历数据来测试其效果
3)使用html格式的简历解析
4)解析英文的简历
5)使用含有大量各种字符的内容解析
6)使用仅包含空格的内容解析
7)使用超长文本比如上百M不是简历的内容解析
9)然后还需对简历各个重要部分进行单独测试:如各种学历的解析,学校的解析,职位的解析,公司的解析等等。貌似这是一项永远都做不完的工作~
举个简单的例子,学历的提取:
应该是要能提取小学,初中,高中,大专,本科,硕士,博士,MBA,EMBA以及对应英文的学历,然后做数据映射成标准化的内容。如果制造各种简历来测试该需求,还不如先来测试其正则表达式,这里只是说明一个测试思路,不再列出对应的正则表达式了~
3.字符串替换
工作中有些时候还会有这样的需求,把某某格式的A内容替换成B内容,这也是一个对正则表达式的应用,我们一样可以从开发人员那里获得正则表达式,对正则表达式进行review并可以构造各种数据来测试它。
4.灵活使用正则表达式
我以前在测试工作中还有这样的情况,把页面中对应的数据都找出来然后从数据库中删除,你可以一条一条的通过手工填写到sql语句中,也可以通过简单的正则表达式对页面源文件解析后获取所有的数据,再通过强大的文本工具UltraEdit等把换行符替换成逗号,写到sql中,我相信后者会更快。当然,类似的应用可能还有很多很多。
5.使用RegexBuddy工具
在线的正则表达式测试已基本满足需求,但是功能不够强大,而regexbuddy具备很多功能,可以测试正则表达式正确性,可以方便地把正则表达式生成各种语言下的代码,具有强大的library库,自带最常用的正则表达式如email,IP,域名,html标签等,还可以进行正则表达式的性能测试等,堪称正则表达式神器,不过是付费软件,大家也可以从网上下载绿色免费版使用。对于正则性能测试是个很好用的功能,因为正则表达式写的不好,直接影响了匹配的性能,体现到文章第2点中就会导致处理时间的延长,这也会是致命的。
原文链接:https://www.f2er.com/regex/362821.html