求教如何优化 pytest 的前置条件的处理逻辑设计

Prince0813
Prince0813
订阅者
285
文章
0
粉丝
测试交流1 237字数 516阅读1分43秒阅读模式

最近公司有个项目,是要使用 pytest 进行自动化测试平台搭建,在做用户管理功能的测试用例编写时,遇到了一个问题,用例中有两个过程完全一样的 case,只是前置条件不同,一个是正常创建,一个是在用户已存在的情况下创建用户,我想用 pytest 的 fixture 来解决这个问题,但是发现 fixture 的最小 scope 是 function,而我的两个用例都是用的同一个 testcase 来执行的,那么 pytest 就无法分别为两个用例执行不同的前置。

求教如何优化 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() 的逻辑是这样:文章源自玩技e族-https://www.playezu.com/184050.html

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 或者有其他插件能否结局我这个问题,请各位大佬能给点意见。文章源自玩技e族-https://www.playezu.com/184050.html软件测试功能必修文章源自玩技e族-https://www.playezu.com/184050.html文章源自玩技e族-https://www.playezu.com/184050.html

 
    • 行吧,就这样吧
      行吧,就这样吧 9

      以下仅为个人理解

      是不是你要创建一个不存在的用户,然后在创建一个相同的用户?

      如果是这样的话,不妨试试就写一个创建用户的用例,然后让这个用例执行两遍呢?
      pip install pytest-repeat
      @pytest.mark.repeat(2)
      def test_create_user():
      # 执行创建用户操作

      不知道我理解对不对

    匿名

    发表评论

    匿名网友
    确定

    拖动滑块以完成验证