最近公司有个项目,是要使用 pytest 进行自动化测试平台搭建,在做用户管理功能的测试用例编写时,遇到了一个问题,用例中有两个过程完全一样的 case,只是前置条件不同,一个是正常创建,一个是在用户已存在的情况下创建用户,我想用 pytest 的 fixture 来解决这个问题,但是发现 fixture 的最小 scope 是 function,而我的两个用例都是用的同一个 testcase 来执行的,那么 pytest 就无法分别为两个用例执行不同的前置。
所以,我就把执行不同前置的逻辑写到了 testcase 里,代码如下:
def test_creatUser(userManager,creatUser_data):
logger.info("=========================创建用户-" + creatUser_data.get('DESC') + "用例-开始执行=========================")
pre = creatUser_data.get('PRE')
userName = creatUser_data.get('username')
if pre == 'isExistUser=false': #期望用户不存在则执行下面的方法
isUserExist(userName, False)
elif pre == 'isExistUser=true':#期望用户存在则执行下面的方法
isUserExist(userName, True)
password=creatUser_data.get('password')
role = creatUser_data.get('role')
res=creatUser_data.get('RES')
assert SystemManager.createUser(userName, password, role) == res
logger.info("=========================创建用户-" + creatUser_data.get('DESC') + "用例-执行结束=========================")
isUserExist() 的逻辑是这样:
def isUserExist(username : str, isExist : bool):
line = Common.queryLineForName('users', 'User_ID', username)
if line >= 1 and isExist == False: #如果用户已存在且期望用户不存在则删除用户
Common.excSQL(delete sql)
logger.info("删除用户" + username)
elif line == -1 and isExist == True: #如果用户不存在且期望用户存在则新增用户
Common.excSQL(insert sql)
logger.info("新建用户" + username)
elif line >= 1 and isExist == True: #如果用户存在且期望用户存在则什么都不做
logger.info("期望用户" + username + "已存在")
if line == -1 and isExist == False: #如果用户不存在且期望用户不存在则什么都不做
logger.info("期望用户" + username + "已删除")
这样虽然能解决问题,但是总感觉不太对,不知道 pytest 或者有其他插件能否结局我这个问题,请各位大佬能给点意见。