51Testing软件测试论坛

标题: python-unittest数据驱动(ddt) [打印本页]

作者: 测试积点老人    时间: 2018-12-12 14:13
标题: python-unittest数据驱动(ddt)

前言

在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的。如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一个测试用例,用例自动加载生成。

一、环境准备

1.安装ddt模块,打开cmd输入pip install ddt在线安装

>>pip install ddt

[attach]119993[/attach]

二、数据驱动原理

1.测试数据为多个字典的list类型

2.测试类前加修饰@ddt.ddt

3.case前加修饰@ddt.data()

4.运行后用例会自动加载成三个单独的用例

[attach]119994[/attach]

5.测试结果:

  1. Testing started at 21:51 ...
  2. start!
  3. {'username': 'selenium\xe7\xbe\xa4', 'psw': '232607095'}
  4. end!
  5. start!
  6. {'username': 'python\xe7\xbe\xa4', 'psw': '226296743'}
  7. end!
  8. start!
  9. {'username': 'appium\xe7\xbe\xa4', 'psw': '512200893'}
  10. end!
复制代码

三、selenium案例

1.从上一篇封装的excel方法里面读取数据,作为测试测试Selenium2+python自动化58-读取Excel数据(xlrd)

2.在之前写的登录那篇基础上做点修改,测试参数读取excel里的数据Selenium2+python自动化48-登录方法(参数化)

3.代码参考如下

  1. # 测试数据
  2. testData = data.dict_data()
  3. print testData

  4. @ddt.ddt
  5. class Bolg(unittest.TestCase):
  6.     u'''登录博客'''
  7.     def setUp(self):
  8.         self.driver = webdriver.Firefox()
  9.         url = "https://passport.cnblogs.com/user/signin"
  10.         self.driver.get(url)
  11.         self.driver.implicitly_wait(30)

  12.     def login(self, username, psw):
  13.         u'''这里写了一个登录的方法,账号和密码参数化'''
  14.         self.driver.find_element_by_id("input1").send_keys(username)
  15.         self.driver.find_element_by_id("input2").send_keys(psw)
  16.         self.driver.find_element_by_id("signin").click()
  17.         time.sleep(3)

  18.     def is_login_sucess(self):
  19.         u'''判断是否获取到登录账户名称'''
  20.         try:
  21.             text = self.driver.find_element_by_id("lnk_current_user").text
  22.             print text
  23.             return True
  24.         except:
  25.             return False

  26.     @ddt.data(*testData)
  27.     def test_login(self, data):
  28.         u'''登录案例参考'''
  29.         print ("当前测试数据%s"%data)
  30.         # 调用登录方法
  31.         self.login(data["username"], data["password"])
  32.         # 判断结果
  33.         result = self.is_login_sucess()
  34.         self.assertTrue(result)

  35.     def tearDown(self):
  36.         self.driver.quit()

  37. if __name__ == "__main__":
  38.     unittest.main()
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2