51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3727|回复: 0
打印 上一主题 下一主题

[原创] 不同文件实现登录功能的数据驱动测试

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-4-27 09:51:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本文介绍网站登陆功能,未使用ddt思想前每次登陆数据都重新写一遍代码,造成代码冗余,与我们设计初衷相悖。
      整篇文章从以下几个方面介绍不同格式的数据怎样利用ddt数据的思想实现登录功能。
      ·什么是DDT思想
      ·登录流程
      ·未使用DDT实现登录功能
      ·数据脚本在代码中实现DDT
      ·数据脚本在CSV文件中实现DDT
      ·数据脚本在json文件中实现DDT
      ·数据脚本在excel文件中实现DDT
      ·数据脚本在ddt模块中实现DDT

      DDT思想
      数据驱动测试是指使用相同的测试用例,但是每次都使用不同的测试数据,进行的一种测试。这些测试数据,通常来自于外部,如.csv文件,.xsl文件,文本文件,或者来自数据库。数据驱动测试是一种最常见的自动化测试技术,用于在许多不同的输入中验证应用程序。
      举个例子:
      比如去超时买东西结账的流程,只是买的东西不同,从选购到结算整个流程都是相同的,通过DDT思想可以把买的商品都统一放到一个文件中,统一进行结账操作。
      登录流程
      1.本机访问地址http://localhost:8888/jpress/user/login
      2.输入用户名和密码(错误、正确)
      3.点击登录按钮
      4.判断是否登录成功
      未使用DDT实现登录功能
      分别定义两个函数实现登录流程,登录成功和登录失败,测试数据放在函数内部。
      如下面代码所示:
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    from  time import sleep

    from selenium import webdriver
    import pytest
    class TestUserLogin(object):
        def setup_class(self):
            self.driver=webdriver.Chrome()
            self.driver.get('http://localhost:8888/jpress/user/login')
            self.driver.maximize_window()

        #用户名、密码错误
        def test_user_logon_username_error(self):
            #测试数据
            username=''
            pwd='123456'
            expected='账号不能为空'
            self.driver.find_element_by_name('user').send_keys(username)
            self.driver.find_element_by_name('pwd').send_keys(pwd)
            self.driver.find_element_by_class_name('btn').click()

            WebDriverWait(self.driver,5).until(EC.alert_is_present())
            alert=self.driver.switch_to.alert
            sleep(3)
            assert alert.text==expected
            alert.accept()

        def test_user_logon_username_pass(self):
         #测试数据
            username='wx1'
            pwd='123456'
            expected='用户中心'
            self.driver.find_element_by_name('user').send_keys(username)
            self.driver.find_element_by_name('pwd').clear()
            self.driver.find_element_by_name('pwd').send_keys(pwd)
            self.driver.find_element_by_class_name('btn').click()
            WebDriverWait(self.driver,5).until(EC.title_is(expected))
            sleep(3)
            assert self.driver.title==expected
            self.driver.quit()

    if __name__ == '__main__':
        pytest.main()


      数据脚本在代码中

      增加如下代码
    login_data=[
            ('','123456','账号不能为空') ,
            ('wx1','123456','用户中心')
        ]     
      @pytest.mark.parametrize('username,pwd,expected',login_data)


      1.之前是2个登录用例改写为一个
      2.断言通过用户名进行判断
      重构完成后代码
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    from  time import sleep

    from selenium import webdriver
    import pytest
    class TestUserLogin(object):
        #测试数据
        login_data=[
            ('','123456','账号不能为空') ,
            ('wx1','123456','用户中心')

        ]
        def setup_class(self):
            self.driver=webdriver.Chrome()
            self.driver.get('http://localhost:8888/jpress/user/login')
            self.driver.maximize_window()
        #测试用户登录
        @pytest.mark.parametrize('username,pwd,expected',login_data)
        #实现登录
        def test_user_logon_username_pass(self,username,pwd,expected):
            self.driver.find_element_by_name('user').clear()
            self.driver.find_element_by_name('user').send_keys(username)
            self.driver.find_element_by_name('pwd').clear()
            self.driver.find_element_by_name('pwd').send_keys(pwd)
            self.driver.find_element_by_class_name('btn').click()
            #断言判断
            if username=='':
                WebDriverWait(self.driver, 5).until(EC.alert_is_present())
                alert = self.driver.switch_to.alert
                sleep(3)
                assert alert.text == expected
                alert.accept()
            else:

                WebDriverWait(self.driver,5).until(EC.title_is(expected))
                sleep(3)
                assert self.driver.title==expected
                self.driver.quit()

    if __name__ == '__main__':
        pytest.main()


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 00:30 , Processed in 0.070230 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表