UI自动化测试之ddt实战

发表于:2022-8-24 09:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:51CTO博客

  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进来数据处理,第三方库 ]
  # -*-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的元组数据一一对应。
  运行结果1 failed, 2 passed in 28.06s?这边我们可以到是执行了三次登录的测试用例,成功2条 报错1条,详细原因可以去分析,我们利用ddt就可以简单的去多次测试一个功能执行多条case,这就是ddt优秀之处。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
价值398元的测试课程免费赠送,填问卷领取吧!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2022
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号