zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Oracle函数如何把符串装换为小写的格式
    Oralce中的synonym同义词
    JS中getYear()的兼容问题
    How to do SSH Tunneling (Port Forwarding)
    所谓深度链接(Deep linking)
    upload size of asp.net
    发一个自动刷网站PV流量的小工具
    解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示"The operation could not be completed." 的问题。
    在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录
    使用SQL语句获取Sql Server数据库的版本
  • 原文地址:https://www.cnblogs.com/hanzhao1987/p/5961952.html
Copyright © 2011-2022 走看看