• 一文带你上手自动化测试中的PO模式!


    在UI的自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明JSON的文件和YAML的文件在UI自动化测试中的应用。

    一、JSON文件

    JSON库主要应用于序列化以及反序列化中,特别是在API的自动化测试中,序列化以及反序列化是知识体系里面必须需要掌握的技术栈的体系。当然我们也是可以针对文件进行序列话和反序列化的处理,针对文件的序列化可以简单地理解为就是把第三方的数据写到文件里面,使用JSON库里面的方法是dump()方法,那么针对文件的反对序列化可以理解为是从文件中读取数据,使用到的JSON库里面的load()的方法,下面主要是针对UI自动化测试的数据进行分离,具体代码为:

    1. import unittest
    2. from parameterized import parameterized,param
    3. from selenium import webdriver
    4. import time as t
    5. #parameterized是参数化库
    6. class AddTest(unittest.TestCase):
    7. def setUp(self) -> None:
    8. self.driver=webdriver.Chrome()
    9. self.driver.maximize_window()
    10. self.driver.implicitly_wait(30)
    11. self.driver.get('https://mail.sina.com.cn/#')
    12. def tearDown(self) -> None:
    13. self.driver.quit()
    14. @parameterized.expand([
    15. param('','','请输入邮箱名'),
    16. param('srtSA','saert','您输入的邮箱名格式不正确'),
    17. param('aserSDAsd@sina.com','asdfrty','登录名或密码错误')
    18. ])
    19. def test_sina_email(self,username,password,result):
    20. t.sleep(2)
    21. self.driver.find_element_by_id('freename').send_keys(username)
    22. t.sleep(2)
    23. self.driver.find_element_by_id('freepassword').send_keys(password)
    24. t.sleep(2)
    25. self.driver.find_element_by_link_text('登录').click()
    26. t.sleep(3)
    27. 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]')
    28. assert div.text==result
    29. if __name__ == '__main__':
    30. unittest.main(verbosity=2)

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

    1. {
    2. "data":
    3. [
    4. {"username": "","password": "","text": "请输入邮箱名"},
    5. {"username": "srtSA","password": "saert","text": "您输入的邮箱名格式不正确"},
    6. {"username": "aserSDAsd@sina.com","password": "asdfrty","text": "登录名或密码错误"}
    7. ]
    8. }

    完善后的测试脚本为:

    1. import unittest
    2. from parameterized import parameterized,param
    3. from selenium import webdriver
    4. import time as t
    5. import json
    6. def readJson():
    7. return json.load(open('sina.json'))['data']
    8. class AddTest(unittest.TestCase):
    9. def setUp(self) -> None:
    10. self.driver=webdriver.Chrome()
    11. self.driver.maximize_window()
    12. self.driver.implicitly_wait(30)
    13. self.driver.get('https://mail.sina.com.cn/#')
    14. def tearDown(self) -> None:
    15. self.driver.quit()
    16. @parameterized.expand([
    17. param(readJson()[0]['username'],readJson()[0]['password'],readJson()[0]['text']),
    18. param(readJson()[1]['username'],readJson()[1]['password'],readJson()[1]['text']),
    19. param(readJson()[2]['username'],readJson()[2]['password'],readJson()[2]['text'])
    20. ])
    21. def test_sina_email(self,username,password,result):
    22. t.sleep(2)
    23. self.driver.find_element_by_id('freename').send_keys(username)
    24. t.sleep(2)
    25. self.driver.find_element_by_id('freepassword').send_keys(password)
    26. t.sleep(2)
    27. self.driver.find_element_by_link_text('登录').click()
    28. t.sleep(3)
    29. 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]')
    30. assert div.text==result
    31. if __name__ == '__main__':
    32. unittest.main(verbosity=2)
    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036

    二、YAML文件

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

    1. username: ""
    2. password: ""
    3. text: "请输入邮箱名"
    4. ---
    5. username: "srtSA"
    6. password: "saert"
    7. text: "您输入的邮箱名格式不正确"
    8. ---
    9. username: "aserSDAsd@sina.com"
    10. password: "asdfrty"
    11. text: "登录名或密码错误"

    完善后的测试脚本为:

    1. import unittest
    2. from parameterized import parameterized,param
    3. from selenium import webdriver
    4. import time as t
    5. import json
    6. import yaml
    7. def readJson():
    8. return json.load(open('sina.json'))['data']
    9. def readYaml():
    10. with open('sina.yaml') as f:
    11. return list(yaml.unsafe_load_all(f))
    12. class AddTest(unittest.TestCase):
    13. def setUp(self) -> None:
    14. self.driver=webdriver.Chrome()
    15. self.driver.maximize_window()
    16. self.driver.implicitly_wait(30)
    17. self.driver.get('https://mail.sina.com.cn/#')
    18. def tearDown(self) -> None:
    19. self.driver.quit()
    20. @parameterized.expand([
    21. param(readYaml()[0]['username'],readYaml()[0]['password'],readYaml()[0]['text']),
    22. param(readYaml()[1]['username'],readYaml()[1]['password'],readYaml()[1]['text']),
    23. param(readYaml()[2]['username'],readYaml()[2]['password'],readYaml()[2]['text'])
    24. ])
    25. def test_sina_email(self,username,password,result):
    26. t.sleep(2)
    27. self.driver.find_element_by_id('freename').send_keys(username)
    28. t.sleep(2)
    29. self.driver.find_element_by_id('freepassword').send_keys(password)
    30. t.sleep(2)
    31. self.driver.find_element_by_link_text('登录').click()
    32. t.sleep(3)
    33. 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]')
    34. assert div.text==result
    35. if __name__ == '__main__':
    36. unittest.main(verbosity=2)

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

    如果有写的不好的地方,请大家多多指教。如果有其他想法,也欢迎在评论区和我交流。

  • 相关阅读:
    测试工程师面试题,你都遇到过哪些呢?
    Lecture 3 Process Concept(进程概念)
    MySQL-多表查询(关联查询)
    js--解决工厂创建对象的缺点---使用构造函数
    视频文件采用哪种格式占的空间最小
    网络原理——TCP/IP--数据链路层,DNS
    LeetCode笔记:Biweekly Contest 81
    重装系统后如何在win10系统打开命令行窗口
    Typescript 回调函数、事件侦听的类型定义与注释--拾人牙慧
    Python单元测试之道:从入门到精通的全面指南
  • 原文地址:https://blog.csdn.net/qq_43371695/article/details/133953128