【测试开发】博客系统——利用selenium的unittest框架进行基本功能测试并生成HTML报告

简介: 编写基本功能测试用例脚本(包含测试固件)利用unittest框架的测试套件进行功能测试生成HTML测试报告

22.png


编写基本功能测试用例脚本(包含测试固件)


登陆模块


import time
from selenium import webdriver
import unittest
class Login(unittest.TestCase):
    # Test继承自unittest.TestCase
    # 测试固件 setup和tearDown
    # 这里的self相当于是一个实例
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
        self.driver.maximize_window()
    def tearDown(self):
        self.driver.quit()
    # 测试方法名必须要test_不然不执行
    def test_login(self):
        driver = self.driver
        driver.get(self.url)
        driver.implicitly_wait(5)
        driver.find_element_by_id("username").send_keys("zhangsan")
        driver.find_element_by_id("password").send_keys("123")
        driver.find_element_by_id("submit").click()
        time.sleep(3)
        self.assertEqual("zhangsan", driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/h3").text,msg="登陆失败")
    if __name__ == "__main__":
        unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''


发布博客模块


import time
from selenium import webdriver
import unittest
class Edit(unittest.TestCase):
    # Test继承自unittest.TestCase
    # 测试固件 setup和tearDown
    # 这里的self相当于是一个实例
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
        self.driver.maximize_window()
    def tearDown(self):
        self.driver.quit()
    # 测试方法名必须要test_不然不执行
    def test_edit(self):
        driver = self.driver
        driver.get(self.url)
        driver.implicitly_wait(5)
        driver.find_element_by_id("username").send_keys("zhangsan")
        driver.find_element_by_id("password").send_keys("123")
        driver.find_element_by_id("submit").click()
        time.sleep(3)
        driver.find_element_by_xpath("/html/body/div[1]/a[2]").click()
        driver.find_element_by_id("title").send_keys("自动测试")
        time.sleep(3)
        driver.find_element_by_id("submit").click()
        time.sleep(3)
        self.assertEqual("自动测试", driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/div[1]").text)
    if __name__ == "__main__":
        unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''


除博客模块


import time
from selenium import webdriver
import unittest
class Delete(unittest.TestCase):
    # Test继承自unittest.TestCase
    # 测试固件 setup和tearDown
    # 这里的self相当于是一个实例
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
        self.driver.maximize_window()
    def tearDown(self):
        self.driver.quit()
    # 测试方法名必须要test_不然不执行
    def test_delete(self):
        driver = self.driver
        driver.get(self.url)
        driver.implicitly_wait(5)
        driver.find_element_by_id("username").send_keys("zhangsan")
        driver.find_element_by_id("password").send_keys("123")
        driver.find_element_by_id("submit").click()
        time.sleep(3)
        driver.find_element_by_xpath("/html/body/div[1]/a[2]").click()
        driver.find_element_by_id("title").send_keys("自动测试")
        time.sleep(3)
        driver.find_element_by_id("submit").click()
        time.sleep(3)
        driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/a").click()
        time.sleep(3)
        driver.find_element_by_xpath("/html/body/div[1]/a[4]").click()
        time.sleep(3)
        self.assertNotEqual("自动测试", driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/div[1]").text)
    if __name__ == "__main__":
        unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''


注销模块


import time
from selenium import webdriver
import unittest
class Logout(unittest.TestCase):
    # Test继承自unittest.TestCase
    # 测试固件 setup和tearDown
    # 这里的self相当于是一个实例
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
        self.driver.maximize_window()
    def tearDown(self):
        self.driver.quit()
    # 测试方法名必须要test_不然不执行
    def test_logout(self):
        driver = self.driver
        driver.get(self.url)
        driver.implicitly_wait(5)
        driver.find_element_by_id("username").send_keys("zhangsan")
        driver.find_element_by_id("password").send_keys("123")
        driver.find_element_by_id("submit").click()
        time.sleep(3)
        driver.find_element_by_xpath("/html/body/div[1]/a[3]").click()
        time.sleep(3)
        self.assertEqual("登录", driver.find_element_by_xpath("/html/body/div[2]/div/form/h3").text)
    if __name__ == "__main__":
        unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''


利用unittest框架的测试套件进行功能测试


runall.py


import time
# 导入test_baidu1,test_baidu2
import test_login
import test_logout
import test_delete
import test_edit
import unittest
import HTMLTestRunner
import os,sys
# 手工添加案例到套件,
def createsuite():
     suite = unittest.TestSuite()
     # 将测试用例加入到测试容器(套件)中
     discover = unittest.defaultTestLoader.discover('../BlogSystem_test', pattern='test*.py', top_level_dir=None)
     print (discover)
     return discover
if __name__ == "__main__":
    curpath = sys.path[0]
    # 解决重复命名的问题
    now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
    # 当前路径下resulreport文件夹不存在的时候就创建一个
    if not os.path.exists(curpath + '/resultreport'):
        os.makedirs(curpath + '/resultreport')
    # 文件名是路径加上文件的名称
    # 准备HTML报告输出的文件
    filename = curpath + '/resultreport/' + now + 'resultreport.html'
    # 打开HTML文件,wb 以写的方式
    with open(filename, 'wb') as fp:
        # 出html报告,括号里的参数是HTML报告里的参数
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行情况',verbosity=2)
        suite = createsuite()
        runner.run(suite)


23.png


生成HTML测试报告



24.png


相关文章
|
1天前
|
测试技术 Android开发 UED
探索软件测试中的自动化框架选择
【10月更文挑战第29天】 在软件开发的复杂过程中,测试环节扮演着至关重要的角色。本文将深入探讨自动化测试框架的选择,分析不同框架的特点和适用场景,旨在为软件开发团队提供决策支持。通过对比主流自动化测试工具的优势与局限,我们将揭示如何根据项目需求和团队技能来选择最合适的自动化测试解决方案。此外,文章还将讨论自动化测试实施过程中的关键考虑因素,包括成本效益分析、维护难度和扩展性等,确保读者能够全面理解自动化测试框架选择的重要性。
11 1
|
6天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
7天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
2天前
|
测试技术 持续交付
探索软件测试中的自动化框架:优势与挑战
【10月更文挑战第28天】 随着软件开发的快速进步,自动化测试已成为确保软件质量的关键步骤。本文将探讨自动化测试框架的优势和面临的挑战,以及如何有效地克服这些挑战。
10 0
|
23天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
36 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
200 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
215 3
快速上手|HTTP 接口功能自动化测试
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
36 0
|
2月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
41 5
|
3月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~