Web自动化测试:数据驱动实战

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

在Web自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。

当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明JSON的文件和YAML的文件在UI自动化测试中的应用。

JSON文件

JSON库主要应用于序列化以及反序列化中,特别是在API的自动化测试中,序列化以及反序列化是知识体系里面必须需要掌握的技术栈的体系。

当然我们也是可以针对文件进行序列话和反序列化的处理,针对文件的序列化可以简单的理解为就是把第三方的数据写到文件里面,使用JSON库里面的方法是dump() 方法。

那么针对文件的反对序列化可以理解为是从文件中读取数据,使用到的JSON库里面的load()的方法,下面主要是针对UI自动化测试的数据进行分离。

具体代码为:

复制代码
import unittest
from parameterized import  parameterized,param
from selenium  import  webdriver
import  time as t
#parameterized是参数化库
class AddTest(unittest.TestCase):
 
    def setUp(self) -> None:
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(30)
        self.driver.get('https://mail.sina.com.cn/#')
 
    def tearDown(self) -> None:
        self.driver.quit()
 
 
    @parameterized.expand([
        param('','','请输入邮箱名'),
        param('srtSA','saert','您输入的邮箱名格式不正确'),
        param('aserSDAsd@sina.com','asdfrty','登录名或密码错误')
    ])
    def test_sina_email(self,username,password,result):
        t.sleep(2)
        self.driver.find_element_by_id('freename').send_keys(username)
        t.sleep(2)
        self.driver.find_element_by_id('freepassword').send_keys(password)
        t.sleep(2)
        self.driver.find_element_by_link_text('登录').click()
        t.sleep(3)
        div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        assert div.text==result
 
if __name__ == '__main__':
    unittest.main(verbosity=2)

在如上的文件中可以看到,我们可以把测试的数据分离到JSON文件中,分离的数据具体为:

复制代码
{
  "data":
  [
    {"username": "","password": "","text": "请输入邮箱名"},
    {"username": "srtSA","password": "saert","text": "您输入的邮箱名格式不正确"},
    {"username": "aserSDAsd@sina.com","password": "asdfrty","text": "登录名或密码错误"}
  ]
}

完善后的测试脚本为:

复制代码
import unittest
from parameterized import  parameterized,param
from selenium  import  webdriver
import  time as t
import  json
 
def readJson():
   return json.load(open('sina.json'))['data']
 
class AddTest(unittest.TestCase):
 
   def setUp(self) -> None:
      self.driver=webdriver.Chrome()
      self.driver.maximize_window()
      self.driver.implicitly_wait(30)
      self.driver.get('https://mail.sina.com.cn/#')
 
   def tearDown(self) -> None:
      self.driver.quit()
 
 
   @parameterized.expand([
      param(readJson()[0]['username'],readJson()[0]['password'],readJson()[0]['text']),
      param(readJson()[1]['username'],readJson()[1]['password'],readJson()[1]['text']),
      param(readJson()[2]['username'],readJson()[2]['password'],readJson()[2]['text'])
   ])
   def test_sina_email(self,username,password,result):
      t.sleep(2)
      self.driver.find_element_by_id('freename').send_keys(username)
      t.sleep(2)
      self.driver.find_element_by_id('freepassword').send_keys(password)
      t.sleep(2)
      self.driver.find_element_by_link_text('登录').click()
      t.sleep(3)
      div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
      assert div.text==result
 
 
if __name__ == '__main__':
   unittest.main(verbosity=2)

YAML文件

下面演示把测试数据存储到YAML文件里面,分离出来的文件内容为:

复制代码
username: ""
password: ""
text: "请输入邮箱名"
 
---
username: "srtSA"
password: "saert"
text: "您输入的邮箱名格式不正确"
 
---
username: "aserSDAsd@sina.com"
password: "asdfrty"
text: "登录名或密码错误"

完善后的测试脚本为:

复制代码
import unittest
from parameterized import  parameterized,param
from selenium  import  webdriver
import  time as t
import  json
import yaml
 
def readJson():
   return json.load(open('sina.json'))['data']
 
 
def readYaml():
   with open('sina.yaml') as f:
      return list(yaml.unsafe_load_all(f))
 
class AddTest(unittest.TestCase):
 
   def setUp(self) -> None:
      self.driver=webdriver.Chrome()
      self.driver.maximize_window()
      self.driver.implicitly_wait(30)
      self.driver.get('https://mail.sina.com.cn/#')
 
   def tearDown(self) -> None:
      self.driver.quit()
 
 
   @parameterized.expand([
      param(readYaml()[0]['username'],readYaml()[0]['password'],readYaml()[0]['text']),
      param(readYaml()[1]['username'],readYaml()[1]['password'],readYaml()[1]['text']),
      param(readYaml()[2]['username'],readYaml()[2]['password'],readYaml()[2]['text'])
   ])
   def test_sina_email(self,username,password,result):
      t.sleep(2)
      self.driver.find_element_by_id('freename').send_keys(username)
      t.sleep(2)
      self.driver.find_element_by_id('freepassword').send_keys(password)
      t.sleep(2)
      self.driver.find_element_by_link_text('登录').click()
      t.sleep(3)
      div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
      assert div.text==result
 
 
if __name__ == '__main__':
   unittest.main(verbosity=2)

上文详细的总结了Web自动化测试中,我们可以把使用到的测试数据分离到JSON文件和YAML的文件,这样达到了数据的分离,目的是让测试更加简单和高效。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

相关推荐
zone773915 小时前
001:简单 RAG 入门
后端·python·面试
F_Quant15 小时前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
允许部分打工人先富起来16 小时前
在node项目中执行python脚本
前端·python·node.js
IVEN_16 小时前
Python OpenCV: RGB三色识别的最佳工程实践
python·opencv
haosend17 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽17 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
IVEN_1 天前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮2 天前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling2 天前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python