注册接口自动化测试已经实现的功能:
整个框架已经实现了流程的正常运行.ddt,运行,收集用例,测试报告
存在问题:
注册问题
注册只能注册一次.如果直接写在excel中,第二次运行用例会提示号码已存在,而且全量预期结果也只能在注册成功之后才能获取id,所以注册之前不能知道id,导致预期结果和实际结果不相符
解决方法:
1,号码递增
每次增加1,可能会出现号码不支持,比如182xxxx9999,如果加1之后变成183xxxx0000,但是并没有这个号
2,清库
别人也会使用这个数据库,会导致把别人需要的手机号或者其他数据也清除,一般不会删库,公司也不一定会有删除权限
3,随机生成号码
(生成各种随机数据)
封装成函数,放到common文件夹中
用例参数动态化
在excel中,把需要生成手机号的用例(注册成功)的数据做成标记
检测json中是否存在标记,如果标记存在,则需要生成随机号码
-获取json的数据(字符串)
-判断字符串是否存在指定标记,如果存在,则调用生成随机号函数替换原先字符串
json_data= test_data["json"]
if "#mobile_phone#" in json_data:
mobile = generate_mobile()
#重新赋值
json_data = json_data.replace("#mobile_phone#",mobile)
-把字符串通过反序列化转换成字典
json_data = json.loads(json_data)
测试报告展示不覆盖
解决方法:
生成时间戳
默认的report.html,需要改成report-2021-10-23-20-18.html
填入filename,生成测试报告的名称
1.获取现在的时间戳
from datetime import datetime
ts = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
注意:月份(m),分钟(M),天(d)
2.字符串拼接f”report-{ts}.html,如果不是自动生成reports文件夹,还需要手工拼接f”reports/report-{ts}.html
ut = unittestreport.TestRunner(suite,filename=f"report-{ts}.html")
全量断言和部分断言
-全量断言,预期结果跟实际结果一个字都不能查,当返回结果不确定的时候(注册之后才会显示用户id),全量断言会导致断言失败
-部分断言,预期结果提取关键字进行断言,只要实际结果有相符的条件则通过
预期结果和实际结果的数据类型都是字典,所以只需要判断所需的值,就能省去其他无关的信息
也可以把所需的字段都进行断言
如果需要多个字段去断言,需要对预期结果进行for循环,每次取出需要断言的键值对,实际结果也使用相同的键值对,进行断言
for key,value in expected.items():
if key == "code":
self.assertEqual(value,actual[key])
my_logger.info("测试用例通过")
elif key == "msg":
self.assertEqual(value, actual[key])
my_logger.info("测试用例通过")
else:
continue
为了减少代码的行数,我们一般会在手工写入测试用例的时候,把这条用例所需的预期结果的信息写入excel表格里,而不是把返回的信息全部复制进去,之后再用for循环expected,然后用遍历出来的value值跟实际结果的值断言
方法3相对好用,维护性高
适合自动化测试的项目
-需求稳定,不会频繁变更(项目初期不太适合)
-研发和测试周期长,需要频繁执行回归测试
-需要在多种平台上重复运行相同测试的场景(跨平台)
-某些测试项目通过手工测试无法实现,或者手工测试成本太高(性能测试)
-被测软件的开发较为规范,能够保证系统的可测试行
综上所述,接口测试更适合自动化测试