UI自动化测试之ddt实战_python

ddt是Python 的第三方库,ddt 模块提供了创建数据驱动的测试,关于该模块详细的信息建议到官方查看,地址为:https://pypi.org/project/ddt/

PIP安装ddt

cmd打开命令行输入 pip install ddt  (前提已经安装pip)

UI自动化测试之ddt实战_安全_02

Pycharm安装ddt 

页面路径:File-Settings-Project:Python-Project Interpreter

UI自动化测试之ddt实战_安全_03

01

Pycharm运行ddt实例 [ ddt+unittest进来数据处理,第三方库 ]

# -*-coding:utf-8-*-


import unittest
from selenium import webdriver
from ddt import data, unpack, ddt


# ddt+unittest进来数据处理,第三方库


test_data = [{"url": "http://*.com", "age": 20}, {"url": "http://*.com", "age": 22}]




@ddt # 装饰测试类
class Testmethod(unittest.TestCase):
@data(*test_data)
@unpack
def test_print_data(self, url, age):
print(url)
print(age)

解析:

@data(*test_data)   用来装饰测试方法,拿到几个参数,就执行几条用例  

不定长参数的知识点:*表示脱外套,只能脱一层

@unpack    

1、只能在*test_data后使用,如果unpack后的参数,少于5个,可以使用unpack。否则不推荐

2、要注意参数不对等的情况,提供对应参数的个数来接收变量

3、如果要对字典unpack,参数要为字典的key值

@unpack    

1、只能在*test_data后使用,如果unpack后的参数,少于5个,可以使用unpack。否则不推荐

2、要注意参数不对等的情况,提供对应参数的个数来接收变量

3、如果要对字典unpack,参数要为字典的key值

02

我们再来看看UI自动化中ddt的用处,ddt库应用在UI自动化测试中,实现编写一条测试用例的代码验证多个测试点。

例如,贵司现在使用到的某管理台,存在多种测试需求,如用户名和密码输入框都为空,用户名为空、密码不为空,密码为空、用户名不为空,分别会返回不同的错误提示信息

# -*-coding:utf-8-*-
import unittest
from selenium import webdriver
from ddt import data, unpack, ddt
import time




@ddt
class XFDJ_login(unittest.TestCase):
@classmethod
def setUpClass(cls):
# print('start!进入初始化环境')
cls.dr = webdriver.Chrome()
cls.dr.maximize_window()
# print('测试浏览器为:{0}'.format(cls.dr.name))
time.sleep(1)


@classmethod
def tearDownclass(cls):
cls.dr.quit()


@data(('', '', u'请输入用户名!'), ('20190604003', '', u'请输入密码 !'), ('', '123456', u'请输入用户名!'))
@unpack
def test_login(cls, username, password, result):
'''验证管理台登录'''


ulr1 = 'http://xfdj.kt3.pagoda.com.cn'
# (u'访问巡服带教测试环境后台管理系统')
cls.dr.get(ulr1)
# print('测试地址为:{0}'.format(cls.dr.current_url))
time.sleep(1)
xpath = cls.dr.find_element_by_xpath
# 点击账号登录,输入用户名+密码
xpath('//*[@id="app"]/div/div[2]/div[2]/div/div[1]/div').click()
time.sleep(1)
# 捕捉账号文本栏,进行输入账号
xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/input').send_keys(username)
time.sleep(1)
# 捕捉密码文本栏,进行输入密码
xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[2]/input').send_keys(password)
time.sleep(1)
# 点击登录
xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[3]/input').click()
divText = xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/div').text
cls.assertEqual(divText, result)




if __name__ == '__main__':
unittest.main(verbosity=2)

解析:

注解:以上代码主要反映了ddt在测试用例中的应用,在@data中数据类型是元组,可以看到不同情况下的测试数据,也就是以下三个测试点:

1.用户名和密码为空,点击“登录”按钮,验证错误提示信息是否是“请输入用户名”;

2.用户名不为空,密码为空,点击“登录”按钮,验证错误是否是“请输入密码”;

3.用户名为空,密码不为空,点击“登录”按钮,验证错误是否是“请输入用户名”。

test_login中有三个参数,分别是username,password,result,分别与@data的元组数据一一对应

UI自动化测试之ddt实战_软件测试_04

运行结果1 failed, 2 passed in 28.06s 这边我们可以到是执行了三次登录的测试用例,成功2条 报错1条,详细原因可以去分析,我们利用ddt就可以简单的去多次测试一个功能执行多条case,这就是ddt优秀之处