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

转载 2018年04月17日 10:04:35

http://mp.weixin.qq.com/s?__biz=MzI5ODU1MzkwMA==&mid=2247484532&idx=1&sn=8df303295e8a06c73fe0b42f0c0b3a02&chksm=eca54337dbd2ca217070815bb703d0f6794dce5aa6370809c6823dd46953c228c2c15fd67be1&mpshare=1&scene=23&srcid=04178FgANJXwXQIavin9hudG#rd

paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例

前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例。本篇继续介绍另外一个参数化的框架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是为了显示用例执行详情

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就可以了,这里就不重复介绍了,实现的效果图如下:





Python的unittest做参数化测试

约定 参数化case的名字必须以 "param_" 为前缀,后面跟真正的test名字;数据提供函数必须是classmethod,以 "collection_" 为前缀,后面跟真正的test名...
  • hqzxsc2006
  • hqzxsc2006
  • 2015-04-03 12:17:10
  • 1960

python3.5+selenium3.4自动化测试2_参数化

这边继续讲一个简单得登陆窗口,一般登陆窗口保护用户名和密码,那测试登陆的时候必然会用到不同的用户名和密码,这个时候就需要对参数化用户名和密码,先上一下代码from selenium import we...
  • qingche456
  • qingche456
  • 2017-05-22 17:16:11
  • 1322

Python unittest parametrized test cases

参考网址:http://eli.thegreenplace.net/2011/08/02/python-unit-testing-parametrized-test-cases import uni...
  • kaku21
  • kaku21
  • 2014-12-30 15:05:50
  • 1077

Selenium2+python自动化44-元素定位参数化(find_element)

Selenium2+python自动化44-元素定位参数化(find_element) 前言 元素定位有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把八种定位合为一种呢?也...
  • mufenglin01
  • mufenglin01
  • 2017-05-23 10:14:06
  • 754

unittest参数化parameterized

github:https://github.com/wolever/parameterizedimport unittest from nose_parameterized import parame...
  • u010895119
  • u010895119
  • 2017-07-05 16:04:15
  • 765

Selenium + Python的Excel数据参数化

原文地址:http://blog.csdn.net/deadwalk/article/details/51332148
  • yzl11
  • yzl11
  • 2016-10-16 21:08:40
  • 3616

【提问答疑】Selenium + Python的Excel数据参数化

背景最近一段时间微信公众号得到了众多网友的留言,微信编辑部的小编们欣喜若狂,在此感谢各位小伙伴们的厚爱。为了与大家进行互动交流,小编认真地查看每一条小伙伴们的留言,有问Fiddler抓包工具的问题,有...
  • Deadwalk
  • Deadwalk
  • 2016-05-06 15:39:50
  • 4686

Python+Selenium利用Excel做参数化

# -*- coding: utf-8 -*- import xlrd def excel_data( ):     data = xlrd.open_workbook("D:/data/t...
  • qq_21440921
  • qq_21440921
  • 2017-12-27 16:50:36
  • 71

自动化脚本参数化

//封装类firefoxutil #-*- coding:utf-8 -*- #导包 from enum import Enum from selenium import webdriver #导入...
  • Mynamezhuang
  • Mynamezhuang
  • 2018-01-11 19:45:23
  • 163

web页面登录+参数化+多线程自动化脚本

#coding=utf-8 from selenium import webdriver import threading import csv import time from selenium.w...
  • henni_719
  • henni_719
  • 2016-10-19 15:26:53
  • 805
收藏助手
不良信息举报
您举报文章:selenium+python自动化97--unittest参数化(paramunittest
举报原因:
原因补充:

(最多只允许输入30个字)