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

发表于:2021-2-26 09:27

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

 作者:桃子    来源:51Testing软件测试网原创

  本文介绍网站登陆功能,未使用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()
  后面的内容更精彩!
  点击下方链接查看完整文章哦~


版权声明:本文出自《51测试天地》第六十期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号