数据驱动DDT(Data-Driven Tests):测试数据的参数化

准备第三方库:

  首先安装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-------------\n")


    @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-----------\n")


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)

 

posted @ 2020-05-14 16:25  ilspring  阅读(722)  评论(0编辑  收藏  举报