当前位置:   article > 正文

pyhton3+selenium的web页面自动化测试框架!

pyhton3+selenium的web页面自动化测试框架!

web自动化测试框架

pyhton3+selenium3+unittest+HTMLTestRunner

环境部署:

python3+Selenium+unittest+HTMLTestRunner+pageObject Web自动化测试框架

(Page Object设计模式)

  1. 环境部署: python3、selenium3
  2. 开发工具: Pycharm
  3. 集成工具: Jenkins
  4. 测试代码托管平台:GitHub
  5. 通过主从服务器执行测试

测试框架结构:

  • common文件夹存放公有元素,如url,测试报告发送邮件地址,使用信息等;
  • file文件夹存放测试过程中需要使用的文件,如图片,txt,zip文件等
  • page文件夹用于存放测试过程中需要使用的页面元素
  • report文件夹用于存放测试生成的测试报告
  • testcase文件夹中存放测试用例
  • HTMLTestRunner.py是将测试结果生成为html版的测试报告的文件
  • run.py 执行run.py文件可以执行全部测试用例

Page Object 设计模式:

由于被测页面会更新,为保持测试脚本的健壮性和可修改性,我们使用了Page Object设计模式,将被测页面的测试脚本与脚本中所使用到的页面元素解耦, 将被测页面的测试脚本文件放在testcase文件夹中,将测试脚本使用到的被测页面元素放置在page文件夹中。

为了测试用例写起来更加方便,我们在page文件夹中放置了BasePage.py文件,BasePage.py文件将查找元素进一步简化,page文件夹中的其他Page文件可以调用BasePage.py中的方法将代码进一步简化。

下面以百度首页作为示例,演示本框架中Page Object模式的使用。

  1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
  5. 可以免费学习!划重点!开源的!!!
  6. qq群号:691998057【暗号:csdn999

test_baiduSearch.py

  1. # coding=utf-8
  2. from HTMLTestRunner import HTMLTestRunner
  3. from selenium import webdriver
  4. from page.searchPage import SearchPage
  5. import time
  6. import unittest
  7. from page.searchPage import *
  8. class TestLogin(unittest.TestCase):
  9. def setUp(self):
  10. self.driver = webdriver.Chrome()
  11. self.url = SearchPage.url
  12. self.driver.maximize_window()
  13. self.page = SearchPage(self.driver)
  14. self.page.get(self.url)
  15. def tearDown(self):
  16. self.driver.close()
  17. def test_search(self):
  18. # 使用pageObject模式时的web页面自动化测试代码
  19. self.page.search = self.page.search_content
  20. self.page.search_btn.click()
  21. time.sleep(2)
  22. # 断言
  23. self.assertIn(self.page.search_content_assert, self.driver.page_source)
  24. # # 未使用pageObject模式时的web页面自动化测试代码
  25. # self.driver.find_element_by_id("kw").send_keys("hello")
  26. # self.driver.find_element_by_id("su").click()
  27. # time.sleep(2)
  28. # self.assertIn("hello", self.driver.page_source)
  29. def test_search1(self):
  30. # 错误的断言导致测试用例failed
  31. self.page.search = self.page.search_content
  32. self.page.search_btn.click()
  33. time.sleep(2)
  34. self.assertIn(self.page.search_content_assert_wrong, self.driver.page_source)
  35. # # 未使用pageObject模式的web页面自动化测试代码
  36. # self.driver.find_element_by_id("kw").send_keys("hello")
  37. # self.driver.find_element_by_id("su").click()
  38. # time.sleep(2)
  39. # self.assertIn("hello1232323", self.driver.page_source)
  40. def test_search2(self):
  41. # 元素值错误,导致的自动化测试用例error
  42. self.page.wrong_search = self.page.search_content
  43. self.page.search_btn.click()
  44. time.sleep(2)
  45. self.assertIn(self.page.search_content_assert, self.driver.page_source)
  46. # # 未使用pageObject模式的web页面自动化测试代码
  47. # self.driver.find_element_by_id("k").send_keys("hello")
  48. # self.driver.find_element_by_id("su").click()
  49. # time.sleep(2)
  50. # self.assertIn("hello", self.driver.page_source)
  51. if __name__ == '__main__':
  52. # 使用以下语句生成本页面的测试报告
  53. # now = time.strftime("%Y-%m-%d-%H-%M-%S")
  54. # suite = unittest.TestSuite()
  55. # suite.addTest(TestLogin("test_search"))
  56. # suite.addTest(TestLogin("test_search1"))
  57. # suite.addTest(TestLogin("test_search2"))
  58. # path = "../report/" + now + "result.html"
  59. # fp = open(path, 'wb')
  60. #
  61. # runner = HTMLTestRunner(stream=fp, title=u"Web页面自动化测试", description=u"测试查询功能")
  62. # runner.run(suite)
  63. # fp.close()
  64. unittest.main()

searchPage.py

  1. from common.pageObject import PageObject, PageElement
  2. from common.url import *
  3. class SearchPage(PageObject):
  4. # 当前测试页面的测试网址url
  5. base_url = Url.base_url
  6. url = base_url+'/'
  7. # 查询元素
  8. search = PageElement(id="kw")
  9. wrong_search = PageElement(id="k")
  10. search_btn = PageElement(id='su')
  11. # 查询内容
  12. search_content = "hello"
  13. # 断言
  14. search_content_assert = "hello"
  15. search_content_assert_wrong = "hello12232423423"

运行所有测试用例:

运行run.py文件即可运行所有测试用例,将所有的测试脚本文件统一使用test开头的文件命进行命名。

run.py

  1. import unittest
  2. import HTMLTestRunner
  3. import time
  4. from common.sendEmail import SendEmail
  5. def get_test_cases(dirpath):
  6. # dirpath是存放测试用例的文件路径
  7. test_cases = unittest.TestSuite()
  8. # 测试用例均使用"test_"开头命名
  9. suites = unittest.defaultTestLoader.discover(dirpath, 'test_*.py', top_level_dir=dirpath)
  10. for suite in suites:
  11. test_cases.addTests(suite)
  12. return test_cases
  13. if __name__ == '__main__':
  14. cases = get_test_cases('../testcase')
  15. now = time.strftime("%Y-%m-%d %H_%M_%S") # 报告生成时间
  16. test_reports_address = '../report' # 测试报告存放位置
  17. filename = '../report/' + now + 'report.html' # 设置报告文件名
  18. fp = open(filename, 'wb')
  19. runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'Web自动化测试', description=u'详细测试结果如下:')
  20. runner.run(cases)
  21. fp.close()
  22. # 向指定邮箱发送测试报告的html文件
  23. time.sleep(6)
  24. # 查找最新生成的测试报告地址
  25. new_report_addr = SendEmail().acquire_report_address(test_reports_address)
  26. # 自动发送邮件
  27. SendEmail().send_email(new_report_addr)

运行完成后会在report文件夹中生成html版本的测试报告,如下所示:

这里能够生成HTML版本的测试报告主要是引用了HTMLTestRunner.py文件,由于官网给出的HTMLTestRunner.py文件是python2版本的,所以需要进行改动,以下是改动过的HTMLTestRunner.py文件生成的测试报告。

向指定邮箱发送邮件:

生成测试报告后可以向指定邮箱发送测试报告的html文件,注意向指定邮箱发送邮件是,需要对发邮件的邮箱进行设置,获取发件箱的授权码,具体操作请百度。

sendEmail.py

  1. # email:***@163.com password:***
  2. """
  3. 使用一个邮箱向另一个邮箱发送测试报告的html文件,这里需要对发送邮件的邮箱进行设置,获取邮箱授权码。
  4. username=“发送邮件的邮箱”, password=“邮箱授权码”
  5. 这里要特别注意password不是邮箱密码而是邮箱授权码。
  6. mail_server = "发送邮箱的服务器地址"
  7. 这里常用的有 qq邮箱——"stmp.qq.com", 163邮箱——"stmp.163.com"
  8. 其他邮箱服务器地址可自行百度
  9. """
  10. import os
  11. import smtplib
  12. from email.mime.text import MIMEText
  13. from email.header import Header
  14. import time
  15. # 自动发送邮件
  16. class SendEmail():
  17. def send_email(self, new_report):
  18. # 读取测试报告中的内容作为邮件的内容
  19. with open(new_report, 'r', encoding='utf8') as f:
  20. mail_body = f.read()
  21. # 发件人地址
  22. send_addr = '***@163.com'
  23. # 收件人地址
  24. reciver_addr = '***@163.com'
  25. # 发送邮箱的服务器地址 qq邮箱是'smtp.qq.com', 163邮箱是'smtp.163.com'
  26. mail_server = 'smtp.163.com'
  27. now = time.strftime("%Y-%m-%d %H_%M_%S")
  28. # 邮件标题
  29. subject = 'web自动化测试报告测试报告' + now
  30. # 发件人的邮箱及邮箱授权码
  31. username = '***@163.com'
  32. password = '***' # 注意这里是邮箱的授权码而不是邮箱密码
  33. # 邮箱的内容和标题
  34. message = MIMEText(mail_body, 'html', 'utf8')
  35. message['Subject'] = Header(subject, charset='utf8')
  36. # 发送邮件,使用的使smtp协议
  37. smtp = smtplib.SMTP()
  38. smtp.connect(mail_server)
  39. smtp.login(username, password)
  40. smtp.sendmail(send_addr, reciver_addr.split(','), message.as_string())
  41. smtp.quit()
  42. # 获取最新的测试报告地址
  43. def acquire_report_address(self, reports_address):
  44. # 测试报告文件夹中的所有文件加入到列表
  45. test_reports_list = os.listdir(reports_address)
  46. # 按照升序排序生成新的列表
  47. new_test_reports_list = sorted(test_reports_list)
  48. # 获取最新的测试报告
  49. the_last_report = new_test_reports_list[-1]
  50. # 最新的测试报告地址
  51. the_last_report_address = os.path.join(reports_address, the_last_report)
  52. return the_last_report_address

发送邮件如下所示:

Jenkins部署:

测试脚本编写完成之后可以将自动化测试脚本托管到git上,然后集成到主站上的Jenkins,配置主从服务器,设置构建时间,让Jenkins可以自动去git下载测试代码,在从服务器中运行,并将测试结果反馈给主站。

点赞关注~~~持续分享!!

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/159659
推荐阅读
相关标签
  

闽ICP备14008679号