zoukankan      html  css  js  c++  java
  • 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自动化测试”
  • 相关阅读:
    May 1 2017 Week 18 Monday
    April 30 2017 Week 18 Sunday
    April 29 2017 Week 17 Saturday
    April 28 2017 Week 17 Friday
    April 27 2017 Week 17 Thursday
    April 26 2017 Week 17 Wednesday
    【2017-07-04】Qt信号与槽深入理解之一:信号与槽的连接方式
    April 25 2017 Week 17 Tuesday
    April 24 2017 Week 17 Monday
    为什么丑陋的UI界面却能创造良好的用户体验?
  • 原文地址:https://www.cnblogs.com/weke/p/15520616.html
Copyright © 2011-2022 走看看