2024Python自动化测试5种模型(建议收藏)

发布于:2024-04-19 ⋅ 阅读:(23) ⋅ 点赞:(0)

1、前言

自动化测试中,我们往往将自动化脚本都归纳属于哪种框架模型,比如关键字驱动模型等。

本篇将列举实际自动化测试中,Python 自动化测试的五种模型:线性模型、模块化驱动模型、数据驱动模型、关键字驱动模型、行为驱动模型。

2、线性模型

通过录制或编写脚本,一个脚本完成一个场景(一组完整功能操作),通过对脚本的回放进行自动化测试。

脚本代码:

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. import time

  4. from selenium import webdriver

  5. driver = webdriver.Chrome()

  6. driver.maximize_window()

  7. driver.implicitly_wait(30)

  8. driver.get('https://www.baidu.com/')

  9. time.sleep(1)

  10. driver.find_element_by_id('kw').send_keys('自动化测试')

  11. time.sleep(1)

  12. driver.find_element_by_id('su').click()

  13. time.sleep(1)

  14. driver.quit()

3、模块化驱动模型

将脚本中重复可复用的部分拿出来写成一个公共的模块,需要的时候就调用它,这样可以大幅提高测试人员编写脚本的效率。

框架目录:

1、config 存放配置文件。

例如 base_data.json 文件,存放测试地址。

  1. {

  2. "url": "https://www.baidu.com/"

  3. }

2、data 存放测试数据。

3、drivers 存放浏览器驱动文件。

4、report 存放执行完成后的测试报告。

5、test 存放测试用例。

(1)case 测试用例步骤。

例如 testSearch.py

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. import time

  4. import os

  5. import unittest

  6. from selenium import webdriver

  7. from AutomatedTestModel.ModularDriverModel.utils.ReadConfig import ReadConfig

  8. from AutomatedTestModel.ModularDriverModel.test.pages.searchPage import SearchPage

  9. class TestSearch(unittest.TestCase):

  10. def setUp(self):

  11. self.driver = webdriver.Chrome()

  12. self.driver.maximize_window()

  13. self.driver.implicitly_wait(30)

  14. def tearDown(self):

  15. self.driver.quit()

  16. def get_url(self):

  17. current_path = os.path.abspath((os.path.dirname(__file__)))

  18. data = ReadConfig().read_json(current_path + "/../../config/base_data.json")

  19. return data['url']

  20. def test_search(self):

  21. url = self.get_url()

  22. self.driver.get(url)

  23. time.sleep(1)

  24. search = SearchPage(self.driver)

  25. search.search('自动化测试')

  26. if __name__ == '__main__':

  27. unittest.main()

(2)common 存放公共的方法等。

(3)pages 存放页面元素与页面操作。

例如 searchPage.py

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. import time

  4. class SearchPage:

  5. def __init__(self, driver):

  6. self.driver = driver

  7. def search_element(self):

  8. self.kw = self.driver.find_element_by_id('kw')

  9. self.su = self.driver.find_element_by_id('su')

  10. def search(self, data):

  11. self.search_element()

  12. self.kw.send_keys(data)

  13. time.sleep(1)

  14. self.su.click()

(4)runner 存放运行脚本。

例如 main.py

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. import os

  4. import time

  5. import unittest

  6. from AutomatedTestModel.ModularDriverModel.utils.HwTestReport import HTMLTestReport

  7. class Main:

  8. def get_all_case(self):

  9. current_path = os.path.abspath(os.path.dirname(__file__))

  10. case_path = current_path + '/../case/'

  11. discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")

  12. print(discover)

  13. return discover

  14. def set_report(self, all_case, report_path=None):

  15. if report_path is None:

  16. current_path = os.path.abspath(os.path.dirname(__file__))

  17. report_path = current_path + '/../../report/'

  18. else:

  19. report_path = report_path

  20. # 获取当前时间

  21. now = time.strftime('%Y{y}%m{m}%d{d}%H{h}%M{M}%S{s}').format(y="年", m="月", d="日", h="时", M="分", s="秒")

  22. # 标题

  23. title = u"搜索测试"

  24. # 设置报告存放路径和命名

  25. report_abspath = os.path.join(report_path, title + now + ".html")

  26. # 测试报告写入

  27. with open(report_abspath, 'wb') as report:

  28. runner = HTMLTestReport(stream=report,

  29. verbosity=2,

  30. images=True,

  31. title=title,

  32. tester='Meng')

  33. runner.run(all_case)

  34. def run_case(self, report_path=None):

  35. all_case = self.get_all_case()

  36. self.set_report(all_case, report_path)

  37. if __name__ == '__main__':

  38. Main().run_case()

6、utils 存放公共方法。

例如导出报告样式、读取配置文件等。

7、run.py 运行脚本。

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. # 软件测试

  4. from AutomatedTestModel.ModularDriverModel.test.runner.main import Main

  5. if __name__ == '__main__':

  6. Main().run_case()

运行后的测试报告。

4、数据驱动模型

该模型会根据数据的变化而引起测试结果的改变,这显然是一个非常高级的概念和想法。简单地说,该模型是一种数据的参数化呈现,即通过输入不同的参数来驱动程序执行,输出不同的测试结果。

框架目录:

1、case 存放测试用例步骤。

2、common 存放公共的方法等。

如读取 Excel 方法、生成报告等样式。

3、data 存放测试数据与预期结果。

4、report 存放执行完成后的测试报告。

打开报告效果。

5、RunMain.py 运行脚本。

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. import os, time, unittest

  4. from AutomatedTestModel.DataDrivenModeling.common.HwTestReport import HTMLTestReport

  5. class RunMain:

  6. def get_all_case(self):

  7. case_path = os.getcwd()

  8. discover = unittest.defaultTestLoader.discover(case_path,

  9. pattern="Test*.py")

  10. print(discover)

  11. return discover

  12. def set_report(self, all_case, report_path=None):

  13. if report_path is None:

  14. current_path = os.path.abspath(os.path.dirname(__file__))

  15. report_path = current_path + '/report/'

  16. else:

  17. report_path = report_path

  18. # 获取当前时间

  19. now = time.strftime('%Y{y}%m{m}%d{d}%H{h}%M{M}%S{s}').format(y="年", m="月", d="日", h="时", M="分", s="秒")

  20. # 标题

  21. title = u"搜索测试"

  22. # 设置报告存放路径和命名

  23. report_abspath = os.path.join(report_path, title + now + ".html")

  24. # 测试报告写入

  25. with open(report_abspath, 'wb') as report:

  26. runner = HTMLTestReport(stream=report,

  27. verbosity=2,

  28. images=True,

  29. title=title,

  30. tester='Meng')

  31. runner.run(all_case)

  32. def run_case(self, report_path=None):

  33. all_case = self.get_all_case()

  34. self.set_report(all_case, report_path)

  35. if __name__ == "__main__":

  36. RunMain().run_case()

5、关键字驱动模型

这是一种通过关键字的改变而引起测试结果改变的功能自动化测试模型。QTP(UFT)、Robot Framework 等都是以关键字驱动为主的自动化测试工具,这类工具典型的特征就是具备一套易用的可视化界面,测试人员需要做的就是将测试脚本按照“填表格”的方式填入,并考虑三个问题就可以了:我要做什么?对谁做?怎么做?

框架目录:

1、action 主要存放动作事件、元素操作。

(1)Action.py

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. from AutomatedTestModel.KeywordDrivenModel.common.ExcelUtil import ExcelUtil

  4. from AutomatedTestModel.KeywordDrivenModel.action.ElementOperation import ElementOperation

  5. class Action:

  6. def __init__(self):

  7. self.element = ElementOperation()

  8. def set_value(self, element, action, parameter=None):

  9. if element == "browser":

  10. return self.element.browser_operate(action, parameter)

  11. elif element == "time":

  12. return self.element.time_operate(action, parameter)

  13. elif element is None or element == "":

  14. return

  15. else: # 如果不是其他的关键字,则默认为定位的元素

  16. return self.element.element_operate(element, action, parameter)

  17. def case_operate(self, excel, sheet):

  18. all_case = ExcelUtil(excel_path=excel, sheet_name=sheet).get_case()

  19. for case in all_case:

  20. self.set_value(case[0], case[1], case[2])

  21. if __name__ == '__main__':

  22. excel = '../case/casedata.xlsx'

  23. Action().case_operate(excel=excel, sheet='搜索')

(2)ElementOperation.py

2、case 存放测试用例步骤。

3、common 存放公共的方法等。

如读取 Excel 方法等。

4、RunMain.py 运行脚本。

#!/usr/bin/env python

  1. # -*- coding: utf-8 -*-

  2. from AutomatedTestModel.KeywordDrivenModel.action.Action import Action

  3. if __name__ == '__main__':

  4. excel = 'case/casedata.xlsx'

  5. a = Action().case_operate(excel=excel, sheet='搜索')

6、行为驱动模型

行为驱动开发(Behave Driven Development,简称BDD),即从用户的需求出发强调系统行为。通过将BDD借鉴到自动化测试中,便产生了行为驱动测试模型,这种模型通过使用自然描述语言确定自动化测试脚本,其优点是可使用自然语言编写测试用例。

框架目录:

1、features 存放用例。

(1)steps 存放步骤

  1. #!/usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. import time

  4. from behave import *

  5. @When('打开访问的网页 "{url}"')

  6. def step_open(context, url):

  7. context.driver.get(url)

  8. time.sleep(5)

  9. @Then('进入百度网站成功')

  10. def step_assert_open(context):

  11. title = context.driver.title

  12. assert title == "百度一下,你就知道"

  13. @When('输入 "{searchdata}"')

  14. def step_search(context, searchdata):

  15. searchdata_element = context.driver.find_element_by_id('kw')

  16. searchdata_element.send_keys(searchdata)

  17. time.sleep(1)

  18. submit_btn = context.driver.find_element_by_id('su')

  19. submit_btn.click()

  20. @Then('获取标题')

  21. def step_assert_search(context):

  22. success_message = context.driver.title

  23. assert success_message == "自动化测试_百度搜索"

(2)environment.py 存放变量

(3)search.feature 存放行为

2、report、result 存放报告

 

总结:

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

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

软件测试面试文档

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

 

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