python一个用例,多组参数,多个结果
在某种情况下,需要用不同的参数组合测试同样的行为,你希望从test case的执行结果上知道在测试什么,而不是单单得到一个大的 test case;此时如果仅仅写一个test case并用内嵌循环来进行,那么其中一个除了错误,很难从测试结果里边看出来。
问题的关键在于是否有办法根据输入参数的不同组合产生出对应的test case;譬如你有10组数据,那么得到10个test case,当然不适用纯手工的方式写那么多个test_成员函数。
一种可能的思路是不利用unittest.TestCase这个类框中的test_成员函数的方法,而是自己写runTest这个成员函数,那样会有一些额外的工作,而且看起来不是那么“智能”。那该如何让框架自动调用testcase呢?
我们的思路是:
- 利用setattr来自动为已有的TestCase类添加成员函数
- 为了使这个方法凑效,需要用类的static method来生成decorate类的成员函数,并使该函数返回一个test函数对象出去
- 在某个地方注册这个添加test成员函数的调用(只需要在实际执行前就可以,可以放在模块中自动执行亦可以手动调用)
代码实例:
import unittest
from test import test_support
class MyTestCase(unittest.TestCase):
def setUp(self):
#some setup code
pass
def clear(self):
#some cleanup code
pass
def action(self, arg1, arg2):
pass
@staticmethod
def getTestFunc(arg1, arg2):
def func(self):
self.action(arg1, arg2)
return func
def __generateTestCases():
arglists = [('arg11', 'arg12'), ('arg21', 'arg22'), ('arg31', 'arg32')]
for args in arglists:
setattr(MyTestCase, 'test_func_%s_%s'%(args[0], args[1]),
MyTestCase.getTestFunc(*args) )
__generateTestCases()
if __name__ =='__main__':
#test_support.run_unittest(MyTestCase)
unittest.main()
案例如下 #一个用例,多个结果# -*- coding: utf-8 -*- import timefrom selenium import webdriverfrom selenium.webdriver.support.select import Selectimport unittestfrom public import config class TestPurchase(unittest.TestCase): u"""购物车哦""" def setUp(self): # self.driver = webdriver.Firefox() # self.driver = webdriver.Ie() self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.base_url = "https://store.wondershare.com/?submod=checkout&method=index&pid=542&license_id=60&sub_lid=4824¤cy=USD&verify=888af7270adb2a46faa26509db54d979" self.verificationErrors = [] self.accept_next_alert = True self.driver.get(self.base_url) def tearDown(self): now = time.strftime('%H_%M_%S',time.localtime(time.time())) self.driver.save_screenshot(""+config.screenshotpath+"\\StoreForCom"+now+".jpg") self.driver.quit() self.assertEqual([],self.verificationErrors) def purchaes_payment(self,phone,carnum): u"""Payment支付""" driver = self.driver driver.find_element_by_xpath(".//*[@id='tack_button']").click() selcurrency = driver.find_element_by_xpath(".//*[@id='currency']") Select(selcurrency).select_by_value("EUR") driver.find_element_by_xpath(".//*[@id='content']/div/table/tbody/tr[2]/td[5]/a[2]").click() driver.find_element_by_xpath(".//*[@id='zipcode']").clear() driver.find_element_by_xpath(".//*[@id='zipcode']").send_keys("zip") # driver.find_element_by_xpath(".//*[@id='phone']").clear() # driver.find_element_by_xpath(".//*[@id='phone']").send_keys(phone) selcountry = driver.find_element_by_xpath(".//*[@id='country']") Select(selcountry).select_by_value("us") selcity = driver.find_element_by_xpath(".//*[@id='state_list']") Select(selcity).select_by_value("New York") driver.find_element_by_xpath(".//*[@id='email']").clear() driver.find_element_by_xpath(".//*[@id='email']").send_keys("jiangyf@wondershare.cn") driver.find_element_by_xpath(".//*[@id='ccnumber']").clear() driver.find_element_by_xpath(".//*[@id='ccnumber']").send_keys(carnum) selmonth = driver.find_element_by_xpath(".//*[@id='ccexpmonth']") Select(selmonth).select_by_value("12") selyear = driver.find_element_by_xpath(".//*[@id='ccexpyear']") Select(selyear).select_by_value("2026") driver.find_element_by_xpath(".//*[@id='cvv']").clear() driver.find_element_by_xpath(".//*[@id='cvv']").send_keys("123") driver.find_element_by_xpath(".//*[@id='nameoncard']").clear() driver.find_element_by_xpath(".//*[@id='nameoncard']").send_keys("John") driver.find_element_by_xpath(".//*[@id='check']").click() text = driver.find_element_by_xpath("html/body/div[3]/div/div[1]/div[1]").text self.assertEqual(text,"Thank You For Your Order!",u"支付失败") @staticmethod def getTestFunc(phone, carnum): def func(self): self.purchaes_payment(phone, carnum) return func def __generateTestCases(): arglists = [('123456789', '5111111111111111'), ('987654321', '5555555555554444')] for args in arglists: setattr(TestPurchase, 'test_func_%s_%s'%(args[0], args[1]), TestPurchase.getTestFunc(*args) )__generateTestCases() if __name__ == '__main__': unittest.main()
python一个用例,多组参数,多个结果的更多相关文章
- 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)
定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...
- 使用robotframework做接口测试5——一个用例中调多个接口
凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...
- Python中unittest采用不同的参数组合产生独立的test case
我们在使用Python的unittest做自动化或者单元测试时,有时需要一个测试用例根据不同的输入.输出组合而执行多次,但是,unittest中一个用例只能有一组参数组合执行,如果采用循环的方式,在生 ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- Python学习札记(十三) Function3 函数参数二
参考:函数参数 Note A.关键字参数: 1.关键字参数:**kw 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个含参数名的 ...
- Python学习手册之捕获组和特殊匹配字符串
在上一篇文章中,我们介绍了 Python 的字符类和对元字符进行了深入讲解,现在我们介绍 Python 的捕获组和特殊匹配字符串.查看上一篇文章请点击:https://www.cnblogs.com/ ...
- RocketMQ一个新的消费组初次启动时从何处开始消费呢?
目录 1.抛出问题 1.1 环境准备 1.2 消息发送者代码 1.3 消费端验证代码 2.探究CONSUME_FROM_MAX_OFFSET实现原理 2.1 CONSUME_FROM_LAST_OFF ...
- Python基本语法_函数属性 & 参数类型 & 偏函数的应用
目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...
- python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...
随机推荐
- python编程 之 json包
1,json是什么? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 我的理解就是:json是一种统一的格式化的文件,比如,一个jso ...
- Nginx系列2:用Nginx搭建一个可用的静态资源Web服务器
上一节中编译好自己的nginx服务器后, 现在要对nginx.conf文件进行配置,搭建一个可用的静态资源Web服务器 1.放入可访问的html文件到nginx文件夹下,如图1所示: 这里我放入的是一 ...
- OGG初始化之将数据从文件加载到Replicat
要使用Replicat建立目标数据,可以使用初始加载Extract从源表中提取源记录,并将它们以规范格式写入提取文件.从该文件中,初始加载Replicat使用数据库接口加载数据.在加载过程中,更改同步 ...
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
14.1.解释 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. main(),客户 IProject,产品接口 CProject,产品类 IIterator,迭代 ...
- PCM EQ DRC 音频处理
PCM Pulse-code modulation的缩写,中文译名是脉冲编码调制.(I2S仅仅是PCM的一个分支,接口定义都是一样的, I2S的采样频率一般为44.1KHZ和48KHZ做,PCM采样频 ...
- linux学习之硬盘的存储原理和内部架构
原文地址:https://blog.csdn.net/tanggao1314/article/details/52074735 首先,让我们看一下硬盘的发展史: 1956年9月13日,IBM的IBM ...
- 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
题意简介 没什么好说,就是让你求出 1 ~ n 之间每个数转化为二进制后 '1' 的个数,然后乘起来输出积 题目分析 emmmm.... 两种解法(同是 $O(\log^2 N)$ 的算法,组合数效率 ...
- macbook 安装win7
长按option进入启动选择页面,选择winpe后进入安装,与普通电脑没有区别.安装后需要安装苹果专用驱动程序Boot Camp,才可以正常使用触控板等驱动
- ffmpeg 加载双语字幕
set infile=in.mp4 set subfile1=cn.srt set subfile2=en.srt set subvf1="subtitles=%subfile1%:forc ...
- Git如何克隆远程仓库
1.首先选择一个合适的地方创建一个空目录 mkdir learngit 2.通过git Init命令把这个目录变成git可以管理的仓库,瞬间git就把仓库建好了 3.将编写的文件放到 lear ...