• python+appium+pytest自动化测试-参数化设置


    来自APP Android端自动化测试初学者的笔记,写的不对的地方大家多多指教哦。(所有内容均以微博V10.11.2版本作为例子)

    在自动化测试用例执行过程中,经常出现执行相同的用例,但传入不同的参数,导致我们需要重复的写用例,这样会使我们的用例变得很长,冗余,很多地方需要编码。参数化可以通过修改传入的参数,从而让相同步骤的用例可以多次执行,对测试用例进行迭代调用。

    参数化设置

    一:使用装饰器实现参数化设置

    参数化需要用到pytest的装饰器:@pytest.mark.parametrize()

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

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

    1.传入一个参数,一个参数对应一个数值
    1. import pytest
    2. classTestAccountLogin:
    3. # 参数化:传入一个参数,一个参数对应一个值 @pytest.mark.parametrize("account", ["123123231321313"])deftest_one(self, account):
    4. pwd = "asdfgh"
    5. self.account_login_page.input_account_pwd(account, pwd)
    6. print("\na的值:", account)
    7. 复制代码

    运行结果为:

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

    运行结果为:

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

    运行结果为;

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

    4.要获得多个参数化参数的所有组合,可以堆叠 parametrize装饰器
    1. import pytest
    2. classTestAccountLogin:
    3. # 所有参数的组合 @pytest.mark.parametrize("account", ["123123123123", "1456456456456", "1789789789789"]) @pytest.mark.parametrize("pwd", ["we", "you", "he"])deftest_one(self, account, pwd):
    4. self.account_login_page.input_account_pwd(account, pwd)
    5. print("\naccount的值:", account, "\npwd的值:", pwd)

    运行结果为:

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

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

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

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

    运行结果为:

    三:参数化读取自外部yaml文件

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

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

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

    在yaml文件中设置传入的参数对应数值

    测试类中实现参数化读取外部yaml文件

    1. import pytest
    2. import yaml
    3. classTestAccountLogin:
    4. # 在初始化前面先获取yaml文件
    5. account_data = yaml.safe_load(open("E:\\study\\Fork\\WeiboDemo\\Weibo\\data\\account_login.yaml", "r"))
    6. print(account_data)
    7. # 参数化数据读取外部文件yaml @pytest.mark.parametrize("account, pwd", account_data)deftest_two(self, account, pwd):
    8. self.account_login_page.input_account_pwd(account, pwd)
    9. assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"

    运行结果为:

    这边在打开yaml文件时使用相对路径会出现No such file or directory: 'account_login.yaml‘的错误,需要使用绝对路径,不知道是什么原因,大神有空的话可以帮忙提点下吗?谢谢!!!

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

    这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 相关阅读:
    geoserver面的填充样式错误记录
    虚拟与真实,交互与交易 | 你为什么喜欢元宇宙游戏?
    如何在 macOS 上安装 Docker Desktop
    animate.css
    Ubuntu安装RabbitMQ server - 在外远程访问
    Linux——进程替换exec、exec系列函数、习题演示
    计算机毕业设计(附源码)python智慧消防维保系统后端
    详细讲解RNN+LSTM+Tree_LSTM(Tree-Long Short Term Memory)基于树状长短期记忆网络
    一幅长文细学GaussDB(一)——一幅长文系列
    lua字符串表的高级用法
  • 原文地址:https://blog.csdn.net/NHB456789/article/details/134441719