如何使用不同参数组合生成独立的TestCase函数(Python)
在使用selenium2 Python做自动化测试的时候遇到个问题,写一个testcase 生成报告后,会有一个case的执行状态记录。这样我们写一个登录功能的自动化用例,只写一个case显然是不行的,测试用例要满足他的覆盖度,所以我们需要写多个用例。但是对于同样的功能,我们用例脚本体现出来的只有输入的参数值不一样,其它操作都是一样的。
这时候一个用例写一个test_case_login()的脚本,但是我们又想在报告中单独记录每一个case的执行状态,不得写多个重复的方法。 如: test_case_login_1() test_case_login_2() test_case_login_3() 这样执行完成后,使用unittest的进行生成测试报告,对每一个test_case都能记录执行状态。但是代码太过冗余,内容太过笨重。 或许此时我们可以仅写一个test case并用内嵌循环来进行,但是会出现一个问题,就是其中一个出了错误,很难从测试结果里边看出来。 问题的关键在于是否有办法根据输入参数的不同组合产生出对应的test case。 比如我5组数据,就应该有5个test_case_login,上面我已经说过不适合直接写5个test_case_login,那么应该怎么做呢? 一种可能的思路是不利用unittest.TestCase这个类框中的test_成员函数的方法,而是自己写runTest这个成员函数,那样会有一些额外的工作,而且看起来不是那么“智能”,如果目的是让框架自动调用test_case
自然的思路就是 • 利用setattr来自动为已有的TestCase类添加成员函数 • 为了使这个方法凑效,需要用类的static method来生成decorate类的成员函数,并使该函数返回一个test函数对象出去 • 在某个地方注册这个添加test成员函数的调用(只需要在实际执行前就可以,可以放在模块中自动执行亦可以手动调用) 用例数据如下:
| case_id | summary | login_name | login_password | remark |
| case_0001 | 用户名为空的验证 | 111111 | 请输入用户名 | |
| case_0002 | 密码为空的验证 | admin | 请输入密码 | |
| case_0003 | 错误的用户名验证 | lidje | 111111 | 对不起,你的校园通账户与密码不能通过系统认证 |
| case_0004 | 错误的密码验证 | admin | ddsss | 对不起,你的校园通账户与密码不能通过系统认证 |
| case_0005 | 正确的用户名、密码验证 | admin | 111111 | 登录成功 |
代码如下:
# -*- coding: utf-8 -*-
from selenium import webdriver
import sys
sys.path.append("public")
from public import location
from public import plogin126mail
from test import test_support
import unittest
import xlrd
importConfigParser classLogin126Mail(unittest.TestCase):
def setUp(self):
print"start"
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
#声明find_element方法
self.fd = location
self.verificationErrors =[]
#载入ini配置文件
cf =ConfigParser.ConfigParser()
cf.read("..\\data\\login_126mail_data.ini")
#读取配置数据
self.base_url = cf.get("urlconf","url")
#定义用户名密码变量
# self.username = "auto_tester"
# self.password = "123qwe"
#定位关键字变量
self.userinput = cf.get("keywords","userinput")
self.passinput = cf.get("keywords","passinput")
self.btnsubmit = cf.get("keywords","btnsubmit")
self.errorwords = cf.get("keywords","errorwords")
self.useridwords = cf.get("keywords","useridwords")
self.lg = plogin126mail.PubLogin("login") def action(self, case_id, case_summary, username, password):
self.driver.get(self.base_url)
self.driver.maximize_window()
print u"========【"+ case_id + u"】"+ case_summary + u"============="
print username
print password
self.lg.login(username, password, self.driver, self.userinput, self.passinput, self.btnsubmit)
spanTF =True
try:
errortxt = self.fd.findCss(self.driver, self.errorwords).text
spanTF =True
except:
spanTF =False
if spanTF:
print errortxt
else:
print self.driver.title
self.assertTrue(self.fd.findId(self.driver, self.useridwords).text, u"登录跳转失败!") @staticmethod
def getTestFunc(case_id, case_summary, username, password):
def func(self):
self.action(case_id, case_summary, username, password)
return func def tearDown(self):
print"finished"
self.driver.quit()
self.assertEqual([], self.verificationErrors) def __generateTestCases():
data = xlrd.open_workbook(u"..\\data\\login_126mail_data.xls")
#通过索引顺序获取Excel表
table = data.sheets()[0]
for args in range(1, table.nrows):
txt = table.row_values(args)
setattr(Login126Mail,'test_login126mail_%s'% txt[0],Login126Mail.getTestFunc(*txt))
__generateTestCases() def test_main():
test_support.run_unittest(Login126Mail)
如何使用不同参数组合生成独立的TestCase函数(Python)的更多相关文章
- Python中unittest采用不同的参数组合产生独立的test case
我们在使用Python的unittest做自动化或者单元测试时,有时需要一个测试用例根据不同的输入.输出组合而执行多次,但是,unittest中一个用例只能有一组参数组合执行,如果采用循环的方式,在生 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- aardio + Python 可视化快速开发桌面程序,一键生成独立 EXE
网络上大家分享的 aardio + Python 混合开发的文章很多,不得不说 aardio 与 Python 混合开发是真的简单 ! 快速入门 推荐几个快速上手教程:< aardio + P ...
- Python—函数的参数组合
参数组合 在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字 ...
- 帆软报表(finereport)参数组合/下拉参数联动
首先实现下拉参数联动 1.参数的定义→添加控件绑定数据→参数过滤和参数面板样式 下拉复选框控件注意事项:select * from tablewhere 1=1${if(len(控件名称)=0,&qu ...
- Linux Ubuntu下用Android NDK 生成独立交叉编译链
本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...
- 消除运行MATLAB生成独立可执行程序的DOS黑屏
基于Matlab生成独立可执行文件后,每次运行都存在DOS黑屏问题,可通过以下方法解决: 在Matlab命令窗口中输入: cd(prefdir) edit compopts.bat 在打开的文件最后添 ...
- excel如何将一个工作薄中的工作表生成独立的工作薄
excel如何将一个工作薄中的工作表生成独立的工作薄 '用vba代码 Sub 另存所有工作表为工作簿() Dim sht As Worksheet Application.ScreenUpdatin ...
- python基础 — 参数组合
参数组合 >>>def f1(a, b, c=0, *args, **kw): ... print('a =', a, 'b =', b, 'c =', c, 'args =', a ...
随机推荐
- 转:python webdriver API 之设置等待时间
有时候为了保证脚本运行的稳定性,需要脚本中添加等待时间.sleep(): 设置固定休眠时间. python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 slee ...
- acm算法模板(4)
杂乱小模板 状态压缩dp小技巧 x&-x是取x的最后一个1的位置. x-=x&-x是去掉x的最后一个1. 读入外挂 int nxt_int(){// neg or pos cha ...
- firefox中 checkbox属性checked="checked"已有,但复选框却不显示打钩的原因
最近在调试复选框的应用,在ie没有问题,考虑到兼容性,试试了firefox,遇到了问题. 复选框绑定了click事件,点一次选中,再点击取消选中,依次类推.这个功能在ie中没问题,但是在firefox ...
- (转载)R14也称作子程序连接寄存器
R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR.当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份. 其他情况下,R14用作通用寄 ...
- MySQL 请选择合适的列! 转载(http://www.cnblogs.com/baochuan/archive/2012/05/23/2513224.html)
点击图片,可查看大图. 介绍 情况:如果你的表结构设计不良或你的索引设计不佳,那么请你优化你的表结构设计和给予合适的索引,这样你的查询性能就能提高几个数量级.——数据越大,索引的价值越能体现 ...
- PHP XDEBUG
PHP调试时,不得不提XDEBUG这个调试利器.学习PHP以来,几乎所有的问题我都利用它来解决. 首先关于如何安装,不在赘述,请自行google之.(需要特别注意的是:PHP5.2 和5.3 ,关于加 ...
- vim多行缩进的方法
在visual模式下选中要缩进的行,然后按>
- zw版【转发·台湾nvp系列Delphi例程】HALCON FillUp1
zw版[转发·台湾nvp系列Delphi例程]HALCON FillUp1 procedure TForm1.Button1Click(Sender: TObject);var img : HImag ...
- django view使用学习记录
判断用户是否登录 request.user.is_authenticated()auth.authenticate(username=username, password=password)
- Delphi Xe 中如何把日期格式统一处理,玩转 TDatetime
日期格式的处理总是会很复杂,因为不同的环境日 期格式也不一样.为了程序统一处理, 最好把格式给统一了: 可以在程序的初始化段: FormatSettings.ShortDateFormat := ' ...