• 如何使用不同参数组合生成独立的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 登录成功
    代码如下:
    1.  1 # -*- coding: utf-8 -*-
       2 from selenium import webdriver
       3 import sys
       4 sys.path.append("public")
       5 from public import location
       6 from public import plogin126mail
       7 from test import test_support
       8 import unittest
       9 import xlrd
      10 importConfigParser
      11 
      12 classLogin126Mail(unittest.TestCase):
      13 def setUp(self):
      14 print"start"
      15  self.driver = webdriver.Chrome()
      16  self.driver.implicitly_wait(30)
      17 #声明find_element方法
      18 self.fd = location
      19  self.verificationErrors =[]
      20 #载入ini配置文件
      21 cf =ConfigParser.ConfigParser()
      22  cf.read("..\data\login_126mail_data.ini")
      23 #读取配置数据
      24 self.base_url = cf.get("urlconf","url")
      25 #定义用户名密码变量
      26 # self.username = "auto_tester"
      27 # self.password = "123qwe"
      28 #定位关键字变量
      29 self.userinput = cf.get("keywords","userinput")
      30  self.passinput = cf.get("keywords","passinput")
      31  self.btnsubmit = cf.get("keywords","btnsubmit")
      32  self.errorwords = cf.get("keywords","errorwords")
      33  self.useridwords = cf.get("keywords","useridwords")
      34  self.lg = plogin126mail.PubLogin("login")
      35 
      36 def action(self, case_id, case_summary, username, password):
      37  self.driver.get(self.base_url)
      38  self.driver.maximize_window()
      39 print u"========【"+ case_id + u""+ case_summary + u"============="
      40 print username
      41 print password
      42  self.lg.login(username, password, self.driver, self.userinput, self.passinput, self.btnsubmit)
      43  spanTF =True
      44 try:
      45  errortxt = self.fd.findCss(self.driver, self.errorwords).text
      46  spanTF =True
      47 except:
      48  spanTF =False
      49 if spanTF:
      50 print errortxt
      51 else:
      52 print self.driver.title
      53  self.assertTrue(self.fd.findId(self.driver, self.useridwords).text, u"登录跳转失败!")
      54 
      55 @staticmethod
      56 def getTestFunc(case_id, case_summary, username, password):
      57 def func(self):
      58  self.action(case_id, case_summary, username, password)
      59 return func
      60 
      61 
      62 def tearDown(self):
      63 print"finished"
      64  self.driver.quit()
      65  self.assertEqual([], self.verificationErrors)
      66 
      67 def __generateTestCases():
      68  data = xlrd.open_workbook(u"..\data\login_126mail_data.xls")
      69 #通过索引顺序获取Excel表
      70 table = data.sheets()[0]
      71 for args in range(1, table.nrows):
      72  txt = table.row_values(args)
      73  setattr(Login126Mail,'test_login126mail_%s'% txt[0],Login126Mail.getTestFunc(*txt))
      74 __generateTestCases()
      75 
      76 
      77 def test_main():
      78  test_support.run_unittest(Login126Mail)
  • 相关阅读:
    iOS开发代码规范
    数组去重方法总结
    iOS进阶学习-网络之数据安全
    OC 动态类型,动态绑定,动态加载
    ios运行某些工程时屏幕上下出现黑边的解决办法
    流程控制和数组(关于JAVA基础注意事项)
    高级函数
    源码
    sql s2 学期的学习
    Java 学习笔记
  • 原文地址:https://www.cnblogs.com/tsbc/p/4080303.html
Copyright © 2020-2023  润新知