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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM