本文章主要会讲解接口测试中用例设计的动态参数化形式,除此之外下方有系列文章的传送门,还在持续更新中,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~
系列文章: 系列文章【Python自动化测试1】遇见Python之美 系列文章【Python自动化测试2】Python安装配置及PyCharm基本使用 系列文章【Python自动化测试3】初识数据类型与基础语法 系列文章【Python自动化测试4】字符串知识总结 系列文章【Python自动化测试5】列表与元组知识总结 系列文章【Python自动化测试6】字典与集合知识总结 系列文章【Python自动化测试7】数据运算符知识合集 系列文章【Python自动化测试8】流程控制语句讲解 系列文章【Python自动化测试9】函数知识合集 系列文章10:【Python自动化测试10】文件基础操作 系列文章1【Python自动化测试11】模块、包与路径知识合集 系列文章1【Python自动化测试12】异常处理机制知识合集 系列文章1【Python自动化测试13】类、对象、属性与方法知识合集 系列文章1【Python自动化测试14】Python自动化测试基础与进阶练习题 系列文章1【Python自动化测试15】unittest测试框架的核心概念与作用 系列文章1【Python自动化测试16】测试用例数据分离 系列文章1【Python自动化测试17】openpyxl二次封装与数据驱动 系列文章1【Python自动化测试18】配置文件解析与实际应用 系列文章1【Python自动化测试19】日志系统logging讲解 系列文章20:【Python自动化测试20】接口自动化测试框架模型搭建 系列文章2【Python自动化测试21】接口自动化测试实战一_接口概念、项目简介及测试流程问答 系列文章2【Python自动化测试22】接口自动化测试实战二_接口框架修改及用例优化
动态参数化
举个例子,我们在设计一个注册接口测试用例的时候,会碰到一个明显的瓶颈,该手机号是未进行注册的,在第一次执行自动化测试用例时能够成功的完成注册,但在第二次再次执行测试用例时会发现,手机号已存在,那么二次执行该测试用例就会执行失败,而面对这种情况,有以下几个解决思路:
'''
解决思路:
1、每一次通过手动的方式打开excel删除后重新输入一个新的手机号
2、在数据库中查询该手机号,如果该手机号已存在,那么在数据库进行手机号删除
3、在现有的手机号上的最末尾数+1
4、随机生成一个手机号
思路分析:
1、第一种方式虽然能够解决,但每一次执行时都需要人工手动的去替换,不便于维护
2、虽然能查询并删除手机号,但往往真实的项目不会轻易的做数据库删除操作,并且一个已注册手机号会有表关联,且大多数情况下测试无权限进行删除
3、这也是一个解决方式,我们可以在第11位数字上,每次都+1,弊端是终究会碰到可能会和其他手机号相冲突的号码从而执行失败,但效率远高于1和2
4、最后的方式也是动态参数化,在需要替换的数据上做标记,当循环遍历到这个标记时使用随机生成的号码替换这个标记,以在执行用例时能够顺利通过
'''
动态参数化就是为了解决这一类的问题,让手机号持续性的随机变更,让每一次的执行都不会因为手机号的重复而导致用例失败,而随机生成某一个手机号码就需要用到数据伪造。
数据伪造
在自动化测试领域中数据伪造并非是什么破坏系统安全的事情,而是希望能够自动化生成测试用例的数据且数据符合一定的规则,例如手机号,电子邮箱等等。数据伪造安可以用在自动化注册模块,也可以用于登录或其他文本输入框来检测一定的输入规则等。
在Python中进行数据伪造库–faker库,通过pip先进行安装后即可:
import faker
# 初始化faker对象,指定生成规则区域为中国
fk = faker.Faker(locale='zh_CN')
result = fk.phone_number()
print(f'手机号:{result}')
# 随机生成一个地址
company = fk.company()
print(f'地址:{company}')
# 随机生成一个公司
address = fk.address()
print(f'公司:{address}')
# 随机生成一个城市
city = fk.city()
print(f'城市:{city}')
除了标准的伪造库能够提供伪造外,我们也可以使用自己期望的方式来制定一个规则:
def generate_new_phone():
phone = '1' + random.choice(['3', '5', '7', '8', '9'])
for i in range(9):
num = random.randint(0, 9)
phone += str(num)
return phone
print(f'函数式手机号:{generate_new_phone()}')
简易的封装伪造库函数,如果你是在框架中写数据伪造的代码,那么可以放在common中,从common中在导入以此来生成一些数据:
import faker
def generate_new_phone():
fk = faker.Faker(locale='zh_CN')
result = fk.phone_number()
return result
# 改动后的片段代码(如对片段代码有疑问,请参考前置文章):
@ddt
class TestLogin(unittest.TestCase):
@list_data(data)
def test_login_success(self, case_data):
json_data = case_data['json']
if '#new_phone#' in json_data:
new_phone = data_forgery.generate_new_phone()
json_data = json_data.replace('#new_phone', new_phone)
好啦~以上就是本次文章分享的全部内容啦,你学会了吗?希望能给大家带来帮助哦!
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点