前言
pytest 是一款强大的 python 自动化测试工具, 可以胜任各种类型或者级别的软件测试工作. pytest 提供了丰富的功能, 包括 assert 重写, 第三方插件, 以及其他测试工具无法比拟的 fixture 模型. pytest 是一个软件测试框架, 是一款命令行工具, 可以自动找到测试用例执行, 并且回报测试结果. 有丰富的基础库, 可以大幅度提高用户编写测试用例的效率. 具备扩展性, 用户可以自己编写插件, 或者安装第三方提供的插件. 可以很容易地与其他工具集成到一起使用. 比如持续集成, web 自动化测试等.
下面列举了一些 pytest 相对于其他框架的有点
1. 简单的测试可以很简单的编写
2. 复杂的测试也可以简单的编写
3. 测试的可读性
4. 易于上手
5. 断言仅使用原生的 assert 关键字, 而不是像 unittest 那样使用 self.assert** 那样
6. pytest 可以运行 unittest 和 nose 编写的测试用例
上面大部分结论其实也不是我个人总结的, 是我从一本书上看到的, 因为我也是刚刚接触这个框架, 了解的也并不多. 还有一个重要原因就是写文章不写点所谓的科学理论好像缺少点啥......(别管了前面了 * 总之一句话: pytest 就是一个测试框架和 unittest 一类, 功能很强, 支持好多插件, 用例写起来简单, 代码逻辑性强, 值得学习! 实际工作中能不能用, 能不能用好那就要靠自己了!)^_^ 废话不多说!
编写第一个测试函数 (用例)
- from selenium import webdriver
- def testOpenUrl():
- try:
- driver = webdriver.Firefox() # 打开浏览器
- driver.get('http://www.baidu.com') # 访问百度
- title = driver.title # 获取百度首页的 title
- assert title == '百度一下, 你就知道' # 断言
- except AssertionError:
- raise AssertionError('断言失败!')
- driver.quit()
可以看到用例很简单, 就是一个普通的函数 (驱动浏览器, 打开百度首页, 断言首页的 title 是否正确), 那么 pytest 是如何运行测试用例的呢?
我们可以通过 cmd 终端, 并且换到当前用例所在的目录, 输入 pytest 即可, 运行结果如下所示
pytest 执行用例命令行参数
上面我们已经学会了执行用例的命令 就是 pytest, 那么真的就这么简单了吗? 其实不然, pytest 还提供了很多可供我们执行用例的命令行参数, 下面我们就一一介绍并演示
1.-v :pytest -v 说明: 可以输出用例更加详细的执行信息, 比如用例所在的文件及用例名称等
2.-s :pytest -s 说明: 输入我们用例中的调式信息, 比如 print 的打印信息等, 我们在上面用例 8 行加上一句 print(driver.title), 我们再运行一下我们的用例看看
3.-m :pytest -m "标记" 说明: 执行特定的测试用例. 我们再次修改一下我们的用例, 并添加一个新的用例
- from selenium import webdriver
- import pytest
- @pytest.mark.run_this_testcase
- def testOpenUrl():
- try:
- driver = webdriver.Firefox() # 打开浏览器
- driver.get('http://www.baidu.com') # 访问百度
- title = driver.title # 获取百度首页的 title
- print(driver.title)
- assert title == '百度一下, 你就知道' # 断言
- except AssertionError:
- raise AssertionError('断言失败!')
- driver.quit()
- def testBaidu():
- driver = webdriver.Firefox() # 打开浏览器
- driver.get('http://www.baidu.com') # 访问百度
- title = driver.title # 获取百度首页的 title
- assert title == '百度一下, 你就知道' # 断言
我们可以看到只执行了被标记的用例, 新添加的用例并没有被执行
4.-k :pytest -k "关键字" 说明: 执行用例包含 "关键字" 的用例
5.-q :pytest -q 说明: 简化控制台的输出, 可以看出输出信息和上面的结果都不一样, 下图中有两个.. 点代替了 pass 结果
以上 5 个参数, 大家可以自己尝试一下, 下一篇文章会继续讲解其他几个常用的参数的使用以及 pytest 是如何发现测试用例的!
来源: https://www.cnblogs.com/linuxchao/p/linuxchao-pytest-1.html