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() #测试报告关闭


excel

username password duanyan 用例
1111 1234567 请输入正确的手机号 smillphoone
22222222222 1111111 请输入正确的手机号 longphone
  123456 请输入手机号 nullphone

 

执行结果:

charu

 

posted @ 2016-10-14 19:51  明镜止水丨  阅读(1985)  评论(0编辑  收藏  举报