zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    微信消息推送和支付宝支付
    django rest framework
    Redis
    flask_migrate
    flask 学习
    windowsserver补丁
    mysql 8.0.23密码更新方法
    交换机配置实例
    爱国论坛OPENWRT
    openwrt资料
  • 原文地址:https://www.cnblogs.com/yuntimer/p/11872295.html
Copyright © 2011-2022 走看看