在单元测试框架方面, 大家比较熟悉的包括了Nose以及其扩展 Nose。尽管 这个框架的名气并不是很大, 但是自从使用了它之后, 就让人爱不释手, 这正如它自己所描述的那样: 结合使用非常简单。
其提供的简单好用的参数化功能以及多种运行模式,不仅让测试脚本变得简单清晰, 也使得调试和运行变得更加方便。
一、参数化
比如在我们开展自动化测试这个工作的时候, 如果遇到要传入不同的参数这种场景, 我们所期待的去返回的那个状态码是200。如果想要用某种方法去做这块的参数化工作, 会感觉比较复杂。
但是如果采用另一种方法来做的话, 就会变得简单很多了。在相关的框架或者工具里面, 存在有.mark.这种装饰器。我们借助它就可以很轻松地把问题给解决了。这里我们就拿sogo的搜索功能作为一个具体的例子来举例说明一下。
用例说明:
执行第一步, 也就是将搜狗搜索那个东西给打开()。
到了第二个阶段之后, 需要你输入这个内容, 然后点击那个放大镜的按钮去进行搜索。
期望:返回正常
如果要利用接口来实现这个目的的话, 那么实际上就相当于在查询参数的后面传递值 tesla 给系统, 并且需要关注响应状态码是否为 200 来进行验证。
如果用接口来做的话,就相当于在query参数后面传tesla即可,验证状态码为200
= .()
url = ''
这个参数里的内容是请求, 它的值叫做特斯拉。
r = .get(url, =para, =False, =False)
r. == 200
实际上, 如果只是传一个搜索词就认为这个接口是正常的, 那么很可能就会出很大的错误。因此我们可能需要传多个搜索词来进行验证。也就是说, 对于参数para中query后面的内容, 我们需要传入多个不同的搜索词。比如, 如果我们想要对VR等词汇进行搜索的话, 具体需要采取什么样的操作呢。
在这个时候, 如果使用带有 .mark. 装饰器的话, 就只需要如代码第8行所示进行操作了, 也就是说, 通过在方法的外面加装一个装饰器就可以了。
= .()
url = '
=
'tesla', 虚拟现实技术, 以及一个空白的字符串。
@.mark.('',)
def ():
参数是这样的, 它包含了查询的部分。
r等于.get函数, 这个函数的url参数是那个变量的值, para参数也是那个变量的值, 还有两个False的值。
r. == 200
这时候, 肯定会有不少同学会忍不住冒出疑问, 心想既然for循环也能搞定多个参数的情况, 为什么还得费劲用你介绍的这种方法。其实关键在于咱们用了参数化这个技术手段。啥意思?
就是说, 每传进去一个参数, 那就相当于创建了一个单独的测试用例, 也就是大家常说的case。就像上面那个例子, 我们一共传进去了三个参数, 最后系统就自动生成了三个独立的测试用例。这样做的好处是什么?
一旦程序运行出了错, 你能清清楚楚、明明白白地看到到底是哪一个具体参数导致的问题。那么问题来了, 具体该怎么做才能达到这样的效果? 我们在命令提示符的界面当中执行脚本文件的操作, 假设这个脚本文件的名字是.py, 它的位置是放置在C盘的下面:
C:\> .py --html=.//.html
你在本次报告中所见到的内容, 是这样的。
通过这份报告, 我们能够非常清楚地知晓到底是哪一个搜索词的验证结果属于正确的范畴, 又或者是哪一个搜索词的验证结果被判定为错误, 所以相较于采用for循环这种处理方式而言, 当前的方法在清晰度上是高出很多的, 此外还包括程序所消耗的运行时长这个维度, 它同样可以提供出一些具有参考价值的额外信息。
二、运行模式
它有着多种运行模式, 这让测试和调试工作变得轻松自如, 下面来介绍5种使用比较频繁的模式。在介绍具体信息之前, 需要提醒大家一句, 系统在执行时, 会去寻找那些以test开头的文件, 以及以test开头的方法或者类, 否则程序就会提示找不到能够运行的用例了。
1、在运行之后会产生一份结果报告。
运行模式:
.py --html=.//.html
效果:
在出错的时候, 可以在这里很清楚地看到错误是因为什么。在上面那张图里面, 本来是想要得到302这个结果的, 但是实际上拿到的是200, 所以才会出现报错的情况。这样一来, 通过查看报告来找问题出在哪里就变得特别简单了。而且测试结果不需要去整理, 直接把报告提交上去就可以了。
2、运行指定的Case
代码块(.py)
这是一句代码定义语句。
该函数的实现过程是这样的。
x = "this"
在x中查找字符h。
def (self):
变量 x被设定成了字符串hello。
(x, 'check')
class ():
def (self):
x = "this"
'h' in x
def (self):
x = "hello"
(x, 'check')
运行模式:
第一种方式是这样弄的, 先用美元符号, 然后再加一个点。
模式 2:$ .py::
模式 3:$ .py::::
说明:
模式一指的是直接去执行那个文件里面包含的所有测试用例。
模式2的情况是这样的, 就是在运行的时候, 去查看文件里面那个class下面的那两个cases。
在模式三中, 也就是在这个类的文件里面运行的时候。
效果:
我们撰写并累积了数目众多的案例以后, 在每次需要进行检查和调试的过程中, 如果非要让每一个案例都依次完整运行一遍程序, 从时间与精力成本上考量无疑是非常浪费时间的一种行为, 借助于这种简单并且直观的设定方法, 我们就能够十分便捷地直接挑选并指定其中的任意一个特定案例来单独执行运行操作。
注意:
在定义class的时候, 是需要以字母T开头的, 如果不这样去做的话, 该class是不会被运行的。
3、通过启动多个进程, 这些程序案例能够以并行处理的方式得以运行。
pip -xdist
运行模式:
$ .py -n NUM
效果:
当案例积累到了相当的数量时, 脚本的实际运行时间会变得非常漫长。如果你确实有想法去缩减这份等待的时间成本, 那么使用本工具来协助你将是一个可行的方案。
你只需在NUM这一位置填入你期望启动的并发进程的具体数值即可实现。此时的处理速度将会得到极大的提升, 其效果显著, 不信大家可以亲自进行尝试以验证结果。
4、重新执行那些测试用例。
pip -
运行模式:
那个是名为数字的.py类型的文件。
效果:
在进行接口测试这个动作的时候, 某些情况下会碰见<503>错误或者突然出现的网络不稳定性情况, 这些现象会导致测试用例的整个运行过程出现失败结果, 而这种失败结果并不是我们内心真正期望获得的那种正确状态, 在面临这种情况时, 使用者可以使用执行测试用例重新运行的办法来对程序发起再次执行的请求操作, 具体能够重新尝试执行的成功次数数量, 直接和你自己在系统界面上手动填写输入的数字有紧密的关联关系, 该数字越大则重试机会越多。
5、显示print内容
运行模式:
$ .py -s
效果:
当执行测试脚本代码的过程中, 假如说为了进行调试操作或者是为了想要打印出某些具体的内容数据, 那么咱们就会在源代码里面添加一些包含 print 关键字的内容语句, 然而在正常执行程序运作的时候, 这些输出内容实际上并不会被直接显示出来, 但是如果采用了加上 -s 这个参数选项来启动运行模式的话, 就可以明确地看到那些 print 输出的具体内容信息会被成功展示出来了。
此外, 多种运行模式允许进行叠加操作, 具体表现为, 倘若用户既希望同时并行运行四个进程, 又期望将print输出内容打印显示出来, 则可尝试使用$ .py -s -n 4这一方式。
三、总结
它的安装方式十分简便, 周围可供选择的学习资料也非常丰富, 在不同框架之间进行切换所产生的成本很低, 如果您对其感兴趣的话, 不妨就加入进来一同开展学习活动的吧。
最后:
你可以到我的微信号里面去, 那里的账号是“-js”, 能够免费领取到一份关于10G大小的软件测试工程师面试宝典文档资料, 并且也有相对应的视频学习教程免费分享给你!
这里面涵盖了大家打基础的知识, 还有Linux必须掌握的内容, Shell的使用, 互联网程序的那些基本原理, Mysql数据库的操作, 抓包工具的专题讲解, 接口测试工具的应用, 测试进阶时候要用到的编程能力, Web界面的自动化测试, APP的自动化测试, 接口的自动化测试, 测试高级阶段的持续集成工作, 还有测试架构的开发和测试框架的编写, 以及性能测试和安全测试等一系列内容。