方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

pytest 上一个函数的结果作为下一个函数的入参_学习

上例子,所有内容均已微博的账号密码登录作为例子

1.传入一个参数,一个参数对应一个数值
import pytest
 
classTestAccountLogin:
 
    # 参数化:传入一个参数,一个参数对应一个值    @pytest.mark.parametrize("account", ["123123231321313"])deftest_one(self, account):
        pwd = "asdfgh"
        self.account_login_page.input_account_pwd(account, pwd)
        print("\na的值:", account)

运行结果为:

pytest 上一个函数的结果作为下一个函数的入参_python_02

2.传入两个参数,一个参数对应一个数值
import pytest
 
classTestAccountLogin:
 
    # 参数化:传入两个参数,一个参数对应一个值    @pytest.mark.parametrize("account, pwd", [("123123231321313", "asfgh")])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
	print("\naccount的值:", account, "\npwd的值:", pwd)

运行结果为:

pytest 上一个函数的结果作为下一个函数的入参_Python_03

3.传入两个参数,一个参数对应多个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入两个参数,一个参数对应两个值    @pytest.mark.parametrize("account, pwd", [
        ("123123231321313", "asdfgh"),
        ("12345645612", "123123")
    ])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
	print("\naccount的值:", account, "\npwd的值:", pwd)

运行结果为;

pytest 上一个函数的结果作为下一个函数的入参_面试_04

注意:@pytest.mark.parametrize()装饰器的第一个参数是字符串的形式来表示用例函数的参数,第二个参数以列表或元组的形式传递测试数据,且装饰器的参数与传入用例函数中的参数是一致的。

4.要获得多个参数化参数的所有组合,可以堆叠 parametrize装饰器

import pytest
 
classTestAccountLogin:
    # 所有参数的组合    @pytest.mark.parametrize("account", ["123123123123", "1456456456456", "1789789789789"])    @pytest.mark.parametrize("pwd", ["we", "you", "he"])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        print("\naccount的值:", account, "\npwd的值:", pwd)

运行结果为:

pytest 上一个函数的结果作为下一个函数的入参_数据_05

注意:如上图,可知所有参数的组合是将参数1的数据分别于参数2的所有数据进行组合配对

二:参数化读取内部列表数据

在测试类中建立数据列表,存放参数对应的数据。这种方法将每个测试类中涉及到的参数数据都写在类的内部,在运行时可以快速方便的修改参数数据。

import pytest
 
# 建立数据列表,存放传入参数对应的数据
data = [("w124hhh77", "111"),
        ("q123457gg", "222"),
        ("rdde54sds", "333")
       ]
 
classTestAccountLogin:
    # 参数化数据读取内部列表数据    @pytest.mark.parametrize("account, pwd", data)deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"

运行结果为:

pytest 上一个函数的结果作为下一个函数的入参_Python_06

三:参数化读取自外部yaml文件
使用参数化读取外部yaml文件,只需要维护数据文件,不需要在代码中改动数据,就可以动态的增加新的测试用例数据。

要读取外部的yaml文件,需要先安装yaml的包,命令行输入:pip install pyyaml,安装成功后如下图所示。在PyCharm中安装的话,是在File→setting,搜索pytest intrepreter,点击“+”号,搜索PyYAML,安装即可。

pytest 上一个函数的结果作为下一个函数的入参_数据_07

首先在工程目录(即测试类外部)下创建一个.yaml文件