python之测试类

简介: python之测试类

各种断言方法:

python在unittest.TestCase类中提供了很多断言的方法,前面说过,断言方法是用来检验该满足的条件是否得到满足,如果该条件确实得到了满足,那么程序行为的假设就得到了确认,可以确定其中没有错误。如果我们认为应该满足的条件实际上并不满足,python将引发异常。


常见的断言的方法:

使用这些方法可核实返回的值等于或不等于预期的值,返回的值为True或False,以及返回的值在列表中或不在列表中。


只能在继unittest.TestCase的类中使用这些方法,随后来看看如何在测试类时可使用其中之一。

一个要测试的类:

类的测试与函数的测试相似,你所做的大部分工作是测试类中的方法的行为。不过还是存在一些不同之处

举例:

class AnonymousSurvey:
    '''收集匿名调查问卷的答案'''
    def __init__(self,question):
        '''存储一个问题,并为存储答案做准备'''
        self.question=question
        self.responses=[]
    def show_question(self):
        '''显示调查问卷'''
        print(self.question)
    def store_response(self,new_response):
        '''存储单份调查问卷'''
        self.responses.append(new_response)
    def show_results(self):
        '''显示收集到的所有答案'''
        print("Survey results")
        for response in self.responses:
            print(f"-{response}")

要创建该类的实例,只需要提供一个问题即可。

为了证明 AnonymousSurvey类能够正确工作,编写一个使用它的程序:

survey.py

class AnonymousSurvey:
    '''收集匿名调查问卷的答案'''
    def __init__(self,question):
        '''存储一个问题,并为存储答案做准备'''
        self.question=question
        self.responses=[]
    def show_question(self):
        '''显示调查问卷'''
        print(self.question)
    def store_response(self,new_response):
        '''存储单份调查问卷'''
        self.responses.append(new_response)
    def show_results(self):
        '''显示收集到的所有答案'''
        print("Survey results")
        for response in self.responses:
            print(f"-{response}")


language_survey.py

from test_name_function import AnonymousSurvey
question="你会那些语言?"
my_survey=AnonymousSurvey(question)
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:
    response=input("lanuage:")
    if response=='q':
        break
    my_survey.store_response(response)
print("\n谢谢你参与到本次调查之中!")
my_survey.show_results()
你会那些语言?
Enter 'q' at any time to quit.
lanuage:汉语
lanuage:法语
lanuage:西班牙语
lanuage:q
谢谢你参与到本次调查之中!
Survey results
-汉语
-法语
-西班牙语

测试 AnonymousSurvey类:

下面编写一个测试,对 AnonymousSurvey类的行为的一个方面进行验证,如果用户面对调查问题只提供一个答案,这个答案被存储起来,现在我们通过使用assertIn()验证该答案确实在答案列表中。

import unittest#导入测试模块
from test_name_function import AnonymousSurvey#导入测试的类
class TestAnonymousSurvey(unittest.TestCase):#针对TestAnonymousSurvey的测试
    def test_store_singnle_response(self):#测试的方法
        question="你会哪些语言?"
        my_survey=AnonymousSurvey(question)
        my_survey.store_response('汉语')#传递单独的语言
        self.assertIn('汉语',my_survey.responses)#核实汉语是否在list中
if __name__=='__main__':
    unittest.main()

测试通过!

.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK

但如果想实现测试两个及以上的语言是否在其中呢?

具体操作如下:

import unittest#导入测试模块
from test_name_function import AnonymousSurvey#导入测试的类
class TestAnonymousSurvey(unittest.TestCase):#针对TestAnonymousSurvey的测试
    def test_store_singnle_response(self):#测试单一语言是否被存储的方法
        question="你会哪些语言?"
        my_survey=AnonymousSurvey(question)
        my_survey.store_response('汉语')#传递单独的语言
        self.assertIn('汉语',my_survey.responses)#核实汉语是否在list中
    def test_store_three_response(self):#测试多个语言是否被存储的方法
        question="你会那些语言?"
        my_survey=AnonymousSurvey(question)
        responses=["英语","汉语","西班牙语"]
        for response in responses:
            my_survey.store_response(response)
        for response in responses:
            self.assertIn(response,my_survey.responses)
if __name__=='__main__':
    unittest.main()
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK

两个测试都通过了,但是该测试不够简洁,下面我们用unittest的另一种方法进行改进。

方法setUp():

import unittest#导入测试模块
from test_name_function import AnonymousSurvey#导入测试的类
class TestAnonymousSurvey(unittest.TestCase):#针对TestAnonymousSurvey的测试
    def setUp(self):#在unittest.TestCase类中包含的setUp方法,创建调查对象和答案列表
    #使下面的测试方法不用自主进行对象的创建和答案的生成
        question="你会哪些语言?"
        self.my_survey=AnonymousSurvey(question)
        self.responses=["英语","汉语","西班牙语"]
    def test_store_singnle_response(self):#测试单一语言是否被存储的方法
        self.my_survey.store_response(self.responses[0])
        self.assertIn(self.responses[0],self.my_survey.responses)#核实self.responses[0]是否在list中
    def test_store_three_response(self):#测试多个语言是否被存储的方法
        for response in self.responses:
            self.my_survey.store_response(response)
        for response in self.responses:
            self.assertIn(response,self.my_survey.responses)
if __name__=='__main__':
    unittest.main()
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK

注意:运行测试用例时,每完成一个单元测试,Python都打印一个字符,测试通过时打印一个句点,测试引发错误时,打印一个E,而测试导致断言失败时,则打印一个F,这就是你运行测试用例时,在输出的第1行中看到的句点和字符数量各不相同的原因,如果测试用例包含很多单元测试,需要运行很长时间就可以观察这些结果来获悉有多少个测试通过了

相关文章
|
1月前
|
安全 测试技术 网络安全
如何在Python Web开发中进行安全测试?
如何在Python Web开发中进行安全测试?
|
1月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
33 4
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
143 5
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
96 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
19天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
1月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
29 4
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
71 3
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
55 1
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
33 5
|
2月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
26 1