appium_python 怎样实现参数化自动生成用例
1.对于一种对同一个页面同一点 要用不同数据测试形成多条测试用例,如果复制的话 会让代码很冗长,并且并不好维护,现在用封装的方法把 不变的代码 和 变化的参数 分别封装,形成动态 生成测试用例 ,主要用到 python中 setattr()重新定义属性的方法实现 ,具体原理为:如果该对象中没有这种属性,会自动加上这个属性,如果存在,则忽略
好了 上代码:
# conding=utf-8 from appium import webdriver import time import sys import re import HTMLTestRunner import unittest import xlrd #excel驱动程序 from test import test_support from xlrd import open_workbook class Login(unittest.TestCase): def setUp(self): pass def clear(self): pass desired_caps = { 'platformName': 'Android', 'deviceName': 'FA56GB105163', 'platformVersion': '5.0.2', 'appPackage': 'com.zhonghong.www.qianjinsuo', 'appActivity': 'com.zhonghong.www.qianjinsuo.main.activity.qjsMian.main.LoadingActivity', 'unicodeKeyboard': True, # 使用unicodeKeyboard的编码方式来发送字符串 ,可以实现输入中文 'resetKeyboard': True # 隐藏虚拟键盘,防止遮挡元素 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 休眠15s等待程序启动 time.sleep(2) driver.find_element_by_id("com.zhonghong.www.qianjinsuo:id/rb_zhiye_service").click() print("aaaaaaa") def getTest(self, arg1, arg2, arg3, arg4): # 定义的函数,最终生成的测试用例的执行方法 if arg1 =='': #判断是否为空 asx=arg1 else:asx=int(arg1) add=int(arg2) eee=arg3 print(asx) self.driver.find_element_by_id("com.zhonghong.www.qianjinsuo:id/textfield_et_phone_num").clear() self.driver.find_element_by_id("com.zhonghong.www.qianjinsuo:id/textfield_et_phone_num").send_keys(asx) self.driver.find_element_by_id("com.zhonghong.www.qianjinsuo:id/textfield_et_pass").clear() self.driver.find_element_by_id("com.zhonghong.www.qianjinsuo:id/textfield_et_pass").send_keys(add) self.driver.find_element_by_id("com.zhonghong.www.qianjinsuo:id/login").click() time.sleep(1) ee = self.driver.find_elements_by_id("com.zhonghong.www.qianjinsuo:id/tv_error_text") self.assertEqual(eee, ee[0].text) @staticmethod def getTestFunc(arg1, arg2, arg3, arg4): def func(self): self.getTest(arg1, arg2, arg3, arg4) return func def __generateTestCases(): data = open_workbook('D:\\test.xls') # 打开文件 table = data.sheet_by_index(0) # 遍历所有数据
# datas = table.row_values(0) # 获取整列数据 nrows = table.nrows #获得行数 list = [] for i in range(1, nrows): #忽略表头 ,开始遍历 datas = table.row_values(i) #获得每行的数据 list.append(datas) #加载到list中 print(list) for args in list: print(args) setattr(Login, 'test_func_%s' % args[3], Login.getTestFunc(*args)) # 通过setattr自动为TestCase类添加成员方法,方法以“test_func_”开头 __generateTestCases() if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(Login('test_func_smillphoone')) suite.addTest(Login('test_func_longphone')) suite.addTest(Login('test_func_nullphone')) timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) filename = "D:\\result_" + timestr + ".html" print (filename) fp = open(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title='测试结果', description='测试报告' ) #suite = unittest.TestLoader().loadTestsFromTestCase(ContactsAndroidTests) #unittest.TextTestRunner(verbosity=2).run(suite) runner.run(suite) #g_browser.quit() fp.close() #测试报告关闭
username | password | duanyan | 用例 |
1111 | 1234567 | 请输入正确的手机号 | smillphoone |
22222222222 | 1111111 | 请输入正确的手机号 | longphone |
123456 | 请输入手机号 | nullphone |
执行结果: