• UI自动化测试实战之数据驱动(十一)


             在UI的自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,

    不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。当然分离到具体的文件里

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

    一、JSON文件

               JSON库主要应用于序列化以及反序列化中,特别是在API的自动化测试中,序列化以及反序列化是知识体

    系里面必须需要掌握的技术栈的体系。当然我们也是可以针对文件进行序列话和反序列化的处理,针对文件的序

    列化可以简单的理解为就是把第三方的数据写到文件里面,使用JSON库里面的方法是dump(),那么针对文件的反

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

    试的数据进行分离,原始代码为:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    import unittest
    from parameterized import  parameterized,param
    from selenium  import  webdriver
    import  time as t
    
    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": "登录名或密码错误"}
      ]
    }

    完善后的测试脚本为:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    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: "登录名或密码错误"
    
    
    

    完善后的测试脚本为:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    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)
    
    

    如上,详细的演示了在UI的自动化测试中,我们可以把我们使用到的测试数据分离到JSON文件和YAML的

    文件,这样达到了数据的分离,相对而言我们的测试就会更加简单和高效。

          感谢您的阅读,后续会持续更新!

    欢迎关注微信公众号“Python自动化测试”
  • 相关阅读:
    电脑端口被占用
    listview初始化后仍为空
    java.lang.NoClassDefFoundError
    int型转换成byte型
    Listview列表上显示按钮
    6.手动实现信号于槽的连接过程
    3.22TextEdit设置html以及pushButton暂停与播放实现
    计算器
    QT学习之QMediaPlayer
    03.27随机数产生、Lcd使用,文本框追加、
  • 原文地址:https://www.cnblogs.com/weke/p/15520616.html
Copyright © 2020-2023  润新知