自动化测试框架Pytest(九)——任务管理

1158 篇文章 46 订阅
723 篇文章 11 订阅

前面几章我们学了一个自动化用例应该怎么写,今天我们来实现一个任务跑多个参数不同的自动化用例。

首先我们在pm_get_token.yaml里新增一个参数parameterize,该参数为一个列表,第一行为我要替换的参数名,后面几行为每一个参数名实际对应的值。

后面的参数如果需要替换值我们都用$ddt{xxx} 来替换。这样我们可以实现写一个yaml文件,同时跑【密码正确】和【密码不正确】两个测试用例。

-  parameterize:    - [ 'name','appid','secret','validate']    - [ '密码正确','wxxx8b67ced3c4b884','xxxx24bd9ca932e31e229be30b0a805b', 'access_token' ]    - [ '密码错误','wxxx8b67ced3c4b884','xxxx24bd9ca932e31e229be30b0a8033', 'errcode' ]  name: $ddt{name}  request:    method: get    url: https://api.weixin.qq.com/cgi-bin/token    params:      grant_type: client_credential      appid: $ddt{appid}      secret: $ddt{secret}  validate:    - contains: $ddt{validate}  extract:    access_token: '"access_token":"(.*?)"'    expires_in: $.expires_in

下面我们来看看如何实现:

1、新建commons/parameterize.py

read_testcase_ddt方法主要是判断参数里是否有parameterize,如果有则去替换ddt{XXX},如果没有就不用替换值直接返回yaml文件里的数据。​​​​​​

import jsonimport osimport yaml
#获取项目根路径def get_object_path():    # print(os.getcwd())    return os.getcwd()
#读取测试用例def read_testcase_ddt(yaml_path):    with open(get_object_path()+yaml_path,encoding='utf-8') as f:        arg_names = yaml.load(f,Loader=yaml.FullLoader)
        # 判断yaml里是否有parameterize参数        if "parameterize" in dict(*arg_names).keys():            new_arg_names = get_ddt(*arg_names)            return new_arg_names        else:            return arg_names

def get_ddt(arg_names):    print("--------------get_ddt---------------")    try:        arg_names_str = json.dumps(arg_names)        data_list = arg_names["parameterize"]        key_length = len(data_list[0])        # 循环数据-判断参数个数是否有误        for param in data_list:            if len(param) != key_length:                print("参数个数有误")                return arg_names        # 替换值        new_art_names = []        for x in range(1, len(data_list)):            # print(data_list[x])            temp_arg_names = arg_names_str            for y in range(0, len(data_list[x])):                # print(data_list[x][y])                # 如果要替换的参数是整形,需要将引号一起替换掉                if isinstance(data_list[x][y], int) or isinstance(data_list[x][y], float):                    temp_arg_names = temp_arg_names.replace('"$ddt{' + data_list[0][y] + '}"', str(data_list[x][y]))                else:                    temp_arg_names = temp_arg_names.replace("$ddt{" + data_list[0][y] + "}", str(data_list[x][y]))
            #将temp_arg_names字符串变成json对象            # print(json.loads(temp_arg_names))            #数组添加json对象            new_art_names.append(json.loads(temp_arg_names))            # print(new_art_names)        return new_art_names    except Exception as e:        print("数据驱动异常")

2、接着我们把用例代码里的read_testcase_yaml改成read_testcase_ddt读取yaml文件​​​​​​

from test9.commons.parameterize import read_testcase_ddtfrom test9.commons.request_util import RequestUtilfrom test9.commons.yaml_util import read_testcase_yaml
class TestProductApi:
    @pytest.mark.parametrize("caseinfo", read_testcase_ddt('/testcase/pm_get_token.yaml'))    def test_get_token(self, caseinfo):
        caseinfo.pop('parameterize')        print(caseinfo)        RequestUtil().standard_yaml(caseinfo)

3、执行一次任务可以看到该用例执行了2次,每次参数都替换成功。

‍这一章代码不多,但如何实现的思路很重要,建议反复观看。

学习资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值