python-ddt实践
Posted 三天乐趣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-ddt实践相关的知识,希望对你有一定的参考价值。
注:这是一小篇学习随笔,使用 python3 语言,ddt 数据驱动,实现新浪微博登录页不同情况下返回错误信息的验证。
一、实践准备
1、python3 环境,chrome 浏览器,PyCharm 编辑器,见另篇:python+selenium环境
2、ddt 是 python 的第三方库,详细信息见官网:ddt 官网点这里
3、在 python3 安装路劲下 cmd 运行命令:pip install ddt,就可以安装 ddt。
二、开始实践
1、实践要求:实现编写一条测试用例的代码验证多个测试点。
例如,在新浪微博登录页面中,多种情况:用户名和密码都为空,用户名为空、密码不为空,用户名不为空、密码为空,分别返回不同的错误提示信息。
2、通过 ddt 来实现,在 python 命令行环境中即可导入。在 ddt 模块中:
@data 表示元组的列表数据,
@unpack 表示来解压元组到多个参数。
变量 divText 取用 xpath :\'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]\' 的 text 文本。
实现代码:
__author__ = "XXX" import unittest import time as t from selenium import webdriver from ddt import data,unpack,ddt @ddt class SinaLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.get(\'http://mail.sina.com.cn/\') self.driver.implicitly_wait(30) def tearDown(self): t.sleep(3) self.driver.quit() @data((\'\',\'\',\'请输入邮箱名\'),(\'\',\'admin\',\'请输入邮箱名\'),(\'admin\',\'\',\'您输入的邮箱名格式不正确\')) @unpack def test_login(self,username,password,result): \'\'\'验证:测试新浪邮箱登录N中情况\'\'\' self.driver.find_element_by_id(\'freename\').send_keys(username) self.driver.find_element_by_id(\'freepassword\').send_keys(password) self.driver.find_element_by_link_text(\'登录\').click() divText = self.driver.find_element_by_xpath(\'/html/body/div[1]/div/div[2]/\' \'div/div/div[4]/div[1]/div[1]/div[1]/span[1]\').text #在freeError里,,根据情况输入情况变化的 self.assertEqual(divText,result) if __name__ == \'__main__\': unittest.main(verbosity=2)
执行后的效果:
也可以把 @data 中的数据分离到一个方法中,如存储在列表中,只需要在 @data 中增加 ”*“ 调用函数 getData,因为 @data 要求的数据类型是元组,加 ”*“ 后便把 getData 函数返回的数据列表型变为元组类型。
修改后的代码:
__author__ = "XXX" import unittest import time as t from selenium import webdriver from ddt import data,unpack,ddt def getData(): \'\'\'数据分离出来放到列表中\'\'\' return [ [\'\',\'\',\'请输入邮箱名\'], [\'\',\'admin\',\'请输入邮箱名\'], [\'admin\',\'\',\'您输入的邮箱名格式不正确\'] ] @ddt class SinaLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.get(\'http://mail.sina.com.cn/\') self.driver.implicitly_wait(30) def tearDown(self): t.sleep(3) self.driver.quit() @data(*getData())#调用函数getData @unpack def test_login(self,username,password,result): \'\'\'验证:测试新浪邮箱登录N中情况\'\'\' self.driver.find_element_by_id(\'freename\').send_keys(username) self.driver.find_element_by_id(\'freepassword\').send_keys(password) self.driver.find_element_by_link_text(\'登录\').click() divText = self.driver.find_element_by_xpath(\'/html/body/div[1]/div/div[2]/\' \'div/div/div[4]/div[1]/div[1]/div[1]/span[1]\').text #在freeError里,根据情况输入情况变化的 self.assertEqual(divText,result) if __name__ == \'__main__\': unittest.main(verbosity=2)
执行后的效果一致。
谢谢查看!
2019-11-16
以上是关于python-ddt实践的主要内容,如果未能解决你的问题,请参考以下文章