python+appium+pytest自动化测试-参数化设置建议收藏
Posted 程序员小濠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+appium+pytest自动化测试-参数化设置建议收藏相关的知识,希望对你有一定的参考价值。
微信公众号【程序员小濠】(主要分享软件测试的学习资源,帮助想转行、进阶、小白成为
高级测试工程师…软件测试交流群:175317069)
参数化设置
一:使用装饰器实现参数化设置
参数化需要用到pytest的装饰器:@pytest.mark.parametrize()
方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
上栗子,所有内容均已微博的账号密码登录作为例子
1.传入一个参数,一个参数对应一个数值
import pytest
class TestAccountLogin:
# 参数化:传入一个参数,一个参数对应一个值
@pytest.mark.parametrize("account", ["123123231321313"])
def test_one(self, account):
pwd = "asdfgh"
self.account_login_page.input_account_pwd(account, pwd)
print("\\na的值:", account)
复制代码
运行结果为:
2.传入两个参数,一个参数对应一个数值
import pytest
class TestAccountLogin:
# 参数化:传入两个参数,一个参数对应一个值
@pytest.mark.parametrize("account, pwd", [("123123231321313", "asfgh")])
def test_one(self, account, pwd):
self.account_login_page.input_account_pwd(account, pwd)
print("\\naccount的值:", account, "\\npwd的值:", pwd)
复制代码
运行结果为:
3.传入两个参数,一个参数对应多个数值
import pytest
class TestAccountLogin:
# 参数化:传入两个参数,一个参数对应两个值
@pytest.mark.parametrize("account, pwd", [
("123123231321313", "asdfgh"),
("12345645612", "123123")
])
def test_one(self, account, pwd):
self.account_login_page.input_account_pwd(account, pwd)
print("\\naccount的值:", account, "\\npwd的值:", pwd)
复制代码
运行结果为;
注意:@pytest.mark.parametrize()装饰器的第一个参数是字符串的形式来表示用例函数的参数,第二个参数以列表或元组的形式传递测试数据,且装饰器的参数与传入用例函数中的参数是一致的。
4.要获得多个参数化参数的所有组合,可以堆叠 parametrize装饰器
import pytest
class TestAccountLogin:
# 所有参数的组合
@pytest.mark.parametrize("account", ["123123123123", "1456456456456", "1789789789789"])
@pytest.mark.parametrize("pwd", ["we", "you", "he"])
def test_one(self, account, pwd):
self.account_login_page.input_account_pwd(account, pwd)
print("\\naccount的值:", account, "\\npwd的值:", pwd)
复制代码
运行结果为:
注意:如上图,可知所有参数的组合是将参数1的数据分别于参数2的所有数据进行组合配对
二:参数化读取内部列表数据
在测试类中建立数据列表,存放参数对应的数据。这种方法将每个测试类中涉及到的参数数据都写在类的内部,在运行时可以快速方便的修改参数数据。
import pytest
# 建立数据列表,存放传入参数对应的数据
data = [("w124hhh77", "111"),
("q123457gg", "222"),
("rdde54sds", "333")
]
class TestAccountLogin:
# 参数化数据读取内部列表数据
@pytest.mark.parametrize("account, pwd", data)
def test_one(self, account, pwd):
self.account_login_page.input_account_pwd(account, pwd)
assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"
复制代码
运行结果为:
三:参数化读取自外部yaml文件
使用参数化读取外部yaml文件,只需要维护数据文件,不需要在代码中改动数据,就可以动态的增加新的测试用例数据。
要读取外部的yaml文件,需要先安装yaml的包,命令行输入:pip install pyyaml,安装成功后如下图所示。在PyCharm中安装的话,是在File→setting,搜索pytest intrepreter,点击“+”号,搜索PyYAML,安装即可。
首先在工程目录(即测试类外部)下创建一个.yaml文件
在yaml文件中设置传入的参数对应数值
测试类中实现参数化读取外部yaml文件
import pytest
import yaml
class TestAccountLogin:
# 在初始化前面先获取yaml文件
account_data = yaml.safe_load(open("E:\\\\study\\\\Fork\\\\WeiboDemo\\\\Weibo\\\\data\\\\account_login.yaml", "r"))
print(account_data)
# 参数化数据读取外部文件yaml
@pytest.mark.parametrize("account, pwd", account_data)
def test_two(self, account, pwd):
self.account_login_page.input_account_pwd(account, pwd)
assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"
复制代码
运行结果为:
这边在打开yaml文件时使用相对路径会出现No such file or directory: 'account_login.yaml‘的错误,需要使用绝对路径,不知道是什么原因,大神有空的话可以帮忙提点下吗?谢谢!!!
以上是关于python+appium+pytest自动化测试-参数化设置建议收藏的主要内容,如果未能解决你的问题,请参考以下文章
Python+Appium+Pytest+Allure实战APP自动化测试框架,小试牛刀!
app 自动化测试 - 多设备并发 -appium+pytest+ 多线程