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

189 篇文章 0 订阅
185 篇文章 0 订阅

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

当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明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)

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)

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

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的软件测试八股文,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值