Python自动化测试框架,谁才是你的唯一?

二 黑 2021-10-28 00:59:21
自动化 Python 测试 框架 自动

Python得天独厚的优势造就了一系列测试框架,在这些测试框架面前,孰优孰劣?具体该如何选择?

俗话说 “没有最好的,只有最合适的”,今天我们就Python当前使用较为频繁的4大主流自动化测试框架, 来一回比拼,从中挑选最为合适你当前项目需求的那一款。

  • Robot Framework

  • Unittest

  • Nose2

  • Pytest

框架初探

Python

Robot Framework

Robot Framework,简称RF,是一个基于Python的开源自动化测试框架,以关键字形式来创建测试用例。

其表格样式的用例编写模式,丰富的库和工具集,以及其并行测试等强大功能,使得RF 在测试人员中非常受欢迎。

RF主要应用于验收测试和测试驱动开发(Test-driven development)这两个场景。

此外,RF还支持在Windows、Mac OS和Linux等跨平台上进行桌面应用、移动应用、Web应用等的自动化测试。

Demo


*** Settings ***
Library SeleniumLibrary
*** Variables ***
${SERVER} localhost:7272
${BROWSER} Firefox
${DELAY} 0
${VALID USER} demo
${VALID PASSWORD} mode
${LOGIN URL} http://${SERVER}/
${WELCOME URL} http://${SERVER}/welcome.html
${ERROR URL} http://${SERVER}/error.html
*** Keywords ***
Open Browser To Login Page
Open Browser ${LOGIN URL} ${BROWSER}
Maximize Browser Window
Set Selenium Speed ${DELAY}
Login Page Should Be Open
Title Should Be Login Page
Go To Login Page
Go To ${LOGIN URL}
Login Page Should Be Open
Input Username
[Arguments] ${username}
Input Text username_field ${username}
Input Password
[Arguments] ${password}
Input Text password_field ${password}
Submit Credentials
Click Button login_button
Welcome Page Should Be Open
Location Should Be ${WELCOME URL}
Title Should Be Welcome Page

Unittest

Unittest是一个基于Python的自动化单元测试框架,属于Python标准库中的一员,支持测试套件的复用。

只需在测试脚本中导入Unittest库,测试人员就可以自定义测试类,创建测试用例,通过unittest.main()运行所有测试用例。

Demo

import unittest
def add(x, y):
return x + y
class Test(unittest.TestCase):
def test_add_001(self):
self.assertEquals(add(4, 5), 9)
def test_add_002(self)
self.assertNotEqual(add(1,2),10)
if __name__ == '__main__':
unittest.main()

常用包/方法如下:

Nose2

Nose2继承自Nose,同样是一个基于Python的单元测试框架, 可以视为Unittest框架的拓展,因此,Nose2下可以运行Unittest编写的测试用例。

Nose2有丰富的插件,集编写测试用例,异常处理等多种功能。相较于上面提到的Unittest和Robot Framework而言,却没那么高的普及度,但仍不失为一款好用的开源测试框架。

Demo


from mynum import *
import nose
def add(x, y):
return x + y
def test_add_integers():
assert add(5, 3) == 8
def test_add_floats():
assert add(1.5, 2.5) == 4
def test_add_strings():
nose.tools.assert_raises(AssertionError, add, 'hello', 'nose2')
if __name__ == '__main__':
nose.run()

常用包/方法如下:

Pytest

Pytest是Python另一款非常热门的开源测试框架。其语法简单,且拥有丰富的插件,可应用于功能测试,API测试,数据库及UI测试等多种测试类型。

Demo1

import pytest
def test_demo_method1():
x = 1
y = 2
assert x+1 == y, "test pass"
def test_demo_method2():
x = 6
y = 3
assert x-1 == y+2, "test failed"

常用包/方法如下:

在这里插入图片描述
Demo2

下面以@pytest.fixture装饰器为例,简单看下它的初始化功能:

(1)单独创建一个conftest.py文件,文件中包含一个用@pytest.fixture修饰的方法,该方法返回一个列表数据。


import pytest
@pytest.fixture
def supply_AA_BB_CC():
aa = 25
bb = 35
cc = 45
print("这是一个独立的文件[conftest.py],包含了fixture标签")
return[aa,bb,cc]

(2)调用conftest.py中被修饰的方法,获取初始化测试数据。

import pytest
def test_withAA(supply_AA_BB_CC):
zz = 35
assert supply_AA_BB_CC[0]== zz, "校验失败,两者不相等"
def test_withBB(supply_AA_BB_CC):
zz = 35
assert supply_AA_BB_CC[1]== zz, "校验失败,两者不相等"
def test_withCC(supply_AA_BB_CC):
zz = 35
assert supply_AA_BB_CC[2]== zz, "校验失败,两者不相等"

(3)运行结果展示如下:

---------------------------- Captured stdout setup ----------------------------
这是一个独立的文件[conftest.py],包含了fixture标签
=========================== short test summary info ===========================
FAILED test_basic_fixture1.py::test_withAA - AssertionError: 校验失败,两者不...
FAILED test_basic_fixture1.py::test_withCC - AssertionError: 校验失败,两者不...
========================= 2 failed, 1 passed in 1.20s =========================

框架选择

Python

在对Python四类主流自动化测试框架有了基本了解后,如何选择适合当前项目的那一款框架呢?

要想做到有的放矢,了解每款框架的优点及局限性是选择最佳Python测试框架的首选方案,下面就让我们一探究竟。

Robot Framework

Unittest

Nose2

Pytest


在对比测试框架的优势及局限性的同时,需要结合测试类型进行考虑:

  • 功能测试:Robot Framework、Pytest、 Unittest

  • 行为驱动测试:Behave、Lettuce (这两个本文暂不涉及)

总结

Python

通过上述分析对比,结合实际项目的自动化测试需求,综合考虑后才能得出一个最佳选项,这样才更有助于自动化项目的进展,达到事半功倍的效果,真正将自动化框架有效进行落实,找到那个属于你的唯一。

最后也给软件测试的朋友们分享一份测试资料:

以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。关注我公众号:程序员二黑,免费获取!

机会只垂青有准备的人,这是一个靠本事的社会。有时候,你之所以发展得不好,不是因为没有机遇,而是因为你没有准备好,导致机遇与你擦肩而过。如果你想要学习,什么时候开始都不晚,而不是瞻前顾后,你只要用尽全力,剩下的交给时间!

加油吧,测试人!路就在脚下,成功就在明天!

推荐阅读

在职阿里6年,一个29岁女软件测试工程师的心声

当过服务员、快递员,现在年薪30W,历尽山河叛逆少年终会成长

公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档

版权声明
本文为[二 黑]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_54696666/article/details/121002520

  1. AI python课和 python课都是198 这两个课是同一个课程内容吗?有什么区别和相似点?
  2. python的__new__()疑问
  3. Python代码阅读(第24篇):根据筛选函数将列表元素分成两组
  4. python怎么实现动态障碍物按固定路径行走
  5. Python代码阅读(第24篇):根据筛选函数将列表元素分成两组
  6. Python题目,希望帮我解答一下辛苦
  7. python +selenium 如何获取下拉列表,默认选中值
  8. 有个pb文件做好的模型,对此模型的操作想用python封装成api,怎么做?
  9. 请问,mac的Pycharm中新建项目时候的Base interpreter选项里有两个Python3.8,该选哪个?
  10. python如何读取指定文件名的excel并分别汇总
  11. 如何写利用python将fastq文件转换成fasta文件的脚本
  12. python小工具
  13. 新猿0基础python教程 如何写好接口文档
  14. 请问我哪里错了呀,数值计算,python运算符号出错,但是我看不出来
  15. Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏(2)
  16. Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤
  17. Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏(3)
  18. 大神们这个问题用python怎么解决啊
  19. 简单理解python装饰器
  20. 货物托运收费问题用python 求解 一直输出错误
  21. 使用 Python 实现的卷积神经网络初学者指南
  22. 为什么Python中调用模块传递列表报错,而直接模块内调用列表就不会报错。
  23. 可视化 Python 打包 exe,这个神器绝了!
  24. 如此高效!数据科学中这4款 Python 神器真的很棒!
  25. 用 Python 开发交互式 Web 应用,So Easy
  26. Python多分类问题pr曲线绘制(含代码)
  27. 80 行 Python 代码搞定全国区划代码
  28. 有包含一阶贝塞尔函数的Python库吗
  29. Python输出乘法口诀表中的2d是什么意思
  30. Python 爬虫goole图片 使用selenium+chromedriver 出错DevToolsActivePort file doesn't exist
  31. python怎么做,我不会做,别走,留下代码!
  32. (数据科学学习手札129)geopandas 0.10版本重要新特性一览
  33. MySQL备份之xtrabackup(Python)
  34. (数据科学学习手札129)geopandas 0.10版本重要新特性一览
  35. Python:枚举列表中所有元素的可能组合
  36. 编写python 程序 人的心跳频率与温度的关系 计算人的累记心跳次数
  37. python相关,请问这张图里代码c for c in coinValueList if c<=change是什么意思
  38. Python中的分段函数问题求解
  39. Python中的递归求年龄问题
  40. python如何求出多个股票的移动均价
  41. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)
  42. python给定两个函数和定义域,判定两个函数是否构造为复合函数。
  43. 求 python3.8 有条件的递增方法
  44. 如何让python的//运算得到一个小数点不是0的结果
  45. 关于#matlab# #算法# #python#的问题:校园导航制作
  46. python的字典编程练习。!
  47. Python类的实例化应用实现输入打印
  48. python的字典编程练习,!
  49. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  50. 求 python3.8 有条件的递增递减算法
  51. 如何才能在python中实现动态宽度对齐输出
  52. 14道Python基础练习题(附答案)
  53. python写一个正则,匹配内容以“关于”,(代转)开头的那句话,要怎么写正则?
  54. 来个Python能做的救救孩子.
  55. Python爬虫,写完程序获取不到结果,
  56. python for循环和while循环打印九九乘法表
  57. Python异常
  58. Python请设计一能产生某月份月历的程序,能提示用 户输入某月份第1天是星期几,并将该月份的月历打印出来,求
  59. Python入门语法(简洁不啰嗦)
  60. Python入门与各种系统安装部署应用