准备第三方库:
首先安装ddt库,其次在脚本中引入ddt
打开官网 https://pypi.org/project/ddt/
from ddt import ddt,data,unpack
@ddt
class MookTestCase(unittest.TestCase):
数据驱动的应用:
1、使用元组存放被测试的数据,一个参数的情况
@data(1,-3,2,0)
def testcase(self,value):
2、使用元组存放被测试的数据,多个参数的情况
@data((3,2),(4,3),(5,3))
@unpack
def testcase(self,value1,value2):
DDT框架实例
#-*- coding: utf-8 -*- import os,time import logging import sys import unittest import HTMLTestRunner from appium import webdriver from ddt import ddt,data,unpack logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) #统一使用utf-8格式 default_encoding = 'utf-8' if sys.getdefaultencoding() != default_encoding: reload(sys) sys.setdefaultencoding(default_encoding) @ddt class MyTestCase(unittest.TestCase): def setUp(self): #字典 ui = { 'platformName': 'Android', # 平台名称 'platformVersion': '5.1.1', # 系统版本号 # 'deviceName': 'emulator-5554', 'deviceName': '127.0.0.1:62001', # 设备名称。如果是真机,在'设置->关于手机->设备名称'里查看 'appPackage': 'com.xiaobai.logindemo', # apk的包名 'appActivity': 'com.xiaobai.logindemo.LoginActivity', # activity 名称 } #Connect appium logger.info("连接appium") self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",ui) # os.system('adb kill-server') logger.info("连接appium2") # self.driver.implicitly_wait(8) print("---------------SetUp------------- ") @data(("csdn","123456",False), ("csdn","1234",True)) @unpack def test_login(self,username,pwd,expectedresult): logger.info("请输入用户名") self.driver.find_element_by_id("com.xiaobai.logindemo:id/et_account").send_keys(username) logger.info("请输入密码") self.driver.find_element_by_id("com.xiaobai.logindemo:id/et_password").send_keys(pwd) logger.info("点击登录按钮") register = self.driver.find_element_by_id("com.xiaobai.logindemo:id/btn_login").click() try: if self.driver.find_element_by_id("com.xiaobai.logindemo:id/btn_login").is_displayed(): exist = True except Exception: exist = False self.assertEqual(exist,expectedresult) time.sleep(3) self.driver.quit() def tearDown(self): logger.info("结束") print("---------------------TearDown----------- ") if __name__ == '__main__': # suite = unittest.TestSuite() # suite.addTest(MyTestCase('test_login')) # # now = time.strftime("%Y-%M-%d-%H-%M-%S",time.localtime()) # filename = ".ReportCase.html" # print('run version {}'.format(sys.version)) # fp = open(now + filename,'wb') # runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"自动化测试报告",description=u"TestCase Report") # runner.run(suite) # # fp.close() unittest.main()
#对应的runner import app.testcase.unittestdemo import unittest # mysuite = unittest.TestSuite() # mysuite.addTest(app.testcase.loginUI.MyTestCase("test_login")) cases = unittest.TestLoader().loadTestsFromTestCase(app.testcase.unittestdemo.MyTestCase) mysuite = unittest.TestSuite([cases]) # mysuite.addTest(app.testcase.loginUI.MyTestCase("test_login")) myrunner = unittest.TextTestRunner(verbosity=2) myrunner.run(mysuite)