selenium+python自动化97--unittest参数化(paramunittest)

前言

paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例。本篇继续介绍另外一个参数化的框架paramunittest,也能实现一样的效果。

环境准备

1.先pip 下载安装 paramunittest

pip install paramunittest

官方文档

1.官方文档地址:https://pypi.python.org/pypi/ParamUnittest/

2.github源码下载地址:https://github.com/rik0/ParamUnittest

3.官方文档上给出了2个使用案例,以下两种方法都是可以的,小编倾向于第二种,更容易理解一些,这里注意了,在pycharm里面运行的时候,最后鼠标要放到if下方执行。

4.加上这个参数verbosity=2是为了显示用例执行详情

verbosity=2

import unittest import paramunittest # 方案一 @paramunittest.parametrized(    ('1', '2'),    #(4, 3),    ('2', '3'),    (('4', ), {'b': '5'}),    ((), {'a': 5, 'b': 6}),    {'a': 5, 'b': 6}, ) class TestFoo(paramunittest.ParametrizedTestCase):    def setParameters(self, a, b):        self.a = a        self.b = b    def testLess(self):        self.assertLess(self.a, self.b) # 方案二 @paramunittest.parametrized(    ('1', '2'),    #(4, 3),    ('2', '3'),    (('4', ), {'b': '5'}),    ((), {'a': 5, 'b': 6}),    {'a': 5, 'b': 6}, ) class TestBar(unittest.TestCase):    def setParameters(self, a, b):        self.a = a        self.b = b    def testLess(self):        self.assertLess(self.a, self.b) if __name__ == "__main__":    unittest.main(verbosity=2)

实践案例

1.从上面官方文档给的案例可以看出,参数可以传元组也可以传字典,先传字典参数,类似于如下这种一组参数:

{“user”: “admin”, “psw”: “123”, “result”: “true”}

2.注意这里接受参数的时候,必须要定义setParameters这个方法,并且只能是这个名称。括号后面的参数分别接受传入的参数名称。前面定义的是字典,那参数就跟前面字典的key保持一致

import unittest import paramunittest import time # python3.6 # 作者:上海-悠悠 @paramunittest.parametrized(    {"user": "admin", "psw": "123", "result": "true"},    {"user": "admin1", "psw": "1234", "result": "true"},    {"user": "admin2", "psw": "1234", "result": "true"},    {"user": "admin3", "psw": "1234", "result": "true"},    {"user": "admin4", "psw": "1234", "result": "true"},    {"user": "admin5", "psw": "1234", "result": "true"},    {"user": "admin6", "psw": "1234", "result": "true"},    {"user": "admin7", "psw": "1234", "result": "true"},    {"user": "admin8", "psw": "1234", "result": "true"},    {"user": "admin9", "psw": "1234", "result": "true"},    {"user": "admin10", "psw": "1234", "result": "true"},    {"user": "admin11", "psw": "1234", "result": "true"}, ) class TestDemo(unittest.TestCase):    def setParameters(self, user, psw, result):        '''这里注意了,user, psw, result三个参数和前面定义的字典一一对应'''        self.user = user        self.user = psw        self.result = result    def testcase(self):        print("开始执行用例:--------------")        time.sleep(0.5)        print("输入用户名:%s" % self.user)        print("输入密码:%s" % self.user)        print("期望结果:%s " % self.result)        time.sleep(0.5)        self.assertTrue(self.result == "true") if __name__ == "__main__":    unittest.main(verbosity=2)

3.执行结果:

开始执行用例:-------------- testcase (paramunittest.TestDemo_0) ... 输入用户名:123 输入密码:123 期望结果:true ok testcase (paramunittest.TestDemo_1) ... 开始执行用例:-------------- 输入用户名:1234 输入密码:1234 期望结果:true ok testcase (paramunittest.TestDemo_10) ... 开始执行用例:-------------- 输入用户名:1234 输入密码:1234 期望结果:true 开始执行用例:-------------- ok testcase (paramunittest.TestDemo_11) ... 输入用户名:1234 输入密码:1234 期望结果:true 开始执行用例:-------------- ok testcase (paramunittest.TestDemo_2) ... 输入用户名:1234 输入密码:1234 期望结果:true ok 开始执行用例:-------------- testcase (paramunittest.TestDemo_3) ... 输入用户名:1234 输入密码:1234 期望结果:true ok testcase (paramunittest.TestDemo_4) ... 开始执行用例:-------------- 输入用户名:1234 输入密码:1234 期望结果:true ok testcase (paramunittest.TestDemo_5) ... 开始执行用例:-------------- 输入用户名:1234 输入密码:1234 期望结果:true 开始执行用例:-------------- ok testcase (paramunittest.TestDemo_6) ... 输入用户名:1234 输入密码:1234 期望结果:true 开始执行用例:-------------- ok testcase (paramunittest.TestDemo_7) ... 输入用户名:1234 输入密码:1234 期望结果:true ok 开始执行用例:-------------- testcase (paramunittest.TestDemo_8) ... 输入用户名:1234 输入密码:1234 期望结果:true ok testcase (paramunittest.TestDemo_9) ... 开始执行用例:-------------- 输入用户名:1234 输入密码:1234 期望结果:true ok ---------------------------------------------------------------------- Ran 12 tests in 12.001s

4.注意了,这里的执行顺序是先执行0,1,再执行10,11,12依次来的,别问我为什么,也别找我解决,设计如此,之前ddt框架也是有同样的问题。

5.除了传字典参数,传元组类型的也是可以的

@paramunittest.parametrized(    ("admin", "123", "true"),    ("admin1", "123", "true"),    ("admin2", "123", "true"),    ("admin3", "123", "true"),    ("admin4", "123", "true"),    ("admin5", "123", "true"),    ("admin6", "123", "true"),    ("admin7", "123", "true"),    ("admin8", "123", "true"),    ("admin9", "123", "true"),    ("admin10", "123", "true"),    ("admin11", "123", "true"),    ("admin12", "123", "true") )

生成html报告

1.unittest生成html报告参考前面介绍的这篇http://www.cnblogs.com/yoyoketang/p/6680503.html就可以了,这里就不重复介绍了,实现的效果图如下:

火热预定!《python3.6接口自动化》5月5号开学

(0)

相关推荐

  • 接口自动化

    一.自动化分类 (1)接口自动化 > python/java+requests+unittest框架来实现 > python/java+RF(RobotFramework)框架来实现--对 ...

  • unittest框架中有多个测试方法,如何实现多个测试方法间参数的传递

    如下方代码中参数self.sucessnum和 self.faillnum,需要把test_case2中的self.faillnum值传递给test_case3,以实现一个累加功能.但是unittes ...

  • 如何编写接口测试用例?测试工程师必备技能!

    自动化始终只是辅助测试工作的一个手段,对于测试人员而言,测试基础和测试用例的设计才是核心.如果测试用例的覆盖率或者质量不高,那将这部分用例实现为自动化用例的意义也就不大了. 那么,接口测试用例应该怎么 ...

  • 记一次相对完整的渗透测试

    教育src 700rank了想着继续冲一波分,早日上核心,于是就有了下面这一次渗透测试的过程了. 开局一个登陆框,且存在密码找回功能. 归属为某教育局 开启burp 抓取登陆包,发现用户密码并未加密 ...

  • selenium+python自动化78-autoit参数化与批量上传

    前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 ...

  • selenium+python自动化77-autoit文件上传

    前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...

  • selenium+python自动化79-文件下载(SendKeys)

    前言 文件下载时候会弹出一个下载选项框,这个弹框是定位不到的,有些元素注定定位不到也没关系,就当没有鼠标,我们可以通过键盘的快捷键完成操作. SendKeys库是专业的处理键盘快捷事件的,所以这里需要 ...

  • selenium+python自动化80-文件下载(不弹询问框)

    前言 上一篇是点弹出框上的按钮去保存文件,本篇介绍一种更加优雅的方法,加载Firefox和Chrome的配置文件,不弹出询问框后台下载. 一.FirefoxProfile 1.点下载的时候,如下图,如 ...

  • selenium+python自动化81-报告优化

    一. 优化html报告 为了满足小伙伴的各种变态需求,为了装逼提示逼格,为了让报告更加高大上,测试报告做了以下优化: - 测试报告中文显示,优化一些断言失败正文乱码问题 - 新增错误和失败截图,展示到 ...

  • Selenium+python自动化82-只截某个元素的图

    前言 selenium截取全图小伙伴们都知道,曾经去面试的时候,面试官问:如何截图某个元素的图?不要全部的,只要某个元素...小编一下子傻眼了, 苦心人,天不负,终于找到解决办法了. 一.seleni ...

  • Selenium+python自动化83-chrome手机wap模式

    一.前言 这里是群里(QQ群:226296743)风神出60大洋悬赏的问题,学会这篇就是赚了60大洋了! 我的环境: - chrome 62 - chromedriver 2.33 二.遇到问题 1. ...

  • Selenium+python自动化84-python3.6用PyUserInput

    前言 python2上安装SendKeys库,对于不好定位的元素,用快捷键操作是极好的,那么在3.6上安装时,会报错 一.python3.6安装SendKeys报错 1.python3.6安装Send ...

  • selenium+python自动化85-Chrome静默模式(headless)

    前言 selenium+phantomjs可以打开无界面的浏览器,实现静默模式启动浏览器完成自动化测试,这个模式是极好的,不需要占用电脑的屏幕. but...,phantomjs这个坑还是比较多的,并 ...