前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UI自动化测试之ddt实战

UI自动化测试之ddt实战

作者头像
测试小兵
发布2020-07-29 11:55:32
6320
发布2020-07-29 11:55:32
举报
文章被收录于专栏:猪圈子猪圈子

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

PIP安装ddt

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

Pycharm安装ddt

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

01

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

代码语言:javascript
复制
# -*-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自动化测试中,实现编写一条测试用例的代码验证多个测试点。

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

代码语言:javascript
复制
# -*-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的元组数据一一对应

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python测试社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档