Hablemos de pruebas unitarias

El marco de pruebas unitarias que viene con Python es el módulo unittest, que incluye algunos métodos para verificar los resultados devueltos y algunas operaciones de inicialización antes de la ejecución del caso de uso;

TestCase es el caso de prueba

TestSuite múltiples casos de prueba juntos

TestLoader se utiliza para cargar TestCase en TestSuite

TestRunner se utiliza para ejecutar casos de prueba y los resultados de la prueba se guardarán en la instancia de TestResult, incluidos cuántos casos de prueba se ejecutaron, cuántos fueron exitosos y cuántos fallaron.

Caso de prueba de unidad simple:

import unittest
def calc(x,y):
    return x+y
class TestCalc(unittest.TestCase):
    def test_pass_case(self):
        '''这个是通过测试用例'''
        print('这个是通过测试用例!')
        res=calc(1,2)
        self.assertEqual(3,res)
        self.assertNotEqual(4,res)#返回的结果不一样
    def test_a(self):
        '''这个是普通的测试用例'''
        print('a')
    def test_fail_case(self):
        '''这个是失败的测试用例'''
        print('这个是失败的测试用例')
        res=calc(3,4)
        self.assertEqual(8,res)
if __name__=='__main__':
    unittest.main()#运行所有的测试用例
import unittest
def calc(x,y):
    return x+y
class TestCalc(unittest.TestCase):
    def test_pass_case(self):
        '''这个是通过测试用例'''
        print('这个是通过测试用例!')
        res=calc(1,2)
        self.assertEqual(3,res)
        self.assertNotEqual(4,res)#返回的结果不一样
    def setUp(self):
        #每个用例运行之前都会执行它
        print('我是setup')
    def tearDown(self):
        #每个用例运行完之后都会执行它
        print('我是tearDown')
    @classmethod
    def setUpClass(cls):
        #所有的用例执行之前执行一次
        print('我是setupClass')
    @classmethod
    def tearDownClass(cls):
        #所有用例都运行完之后执行一次
        print('我是tearDownClass')
    def test_a(self):
        '''这个是普通的测试用例'''
        print('a')
    def test_fail_case(self):
        '''这个是失败的测试用例'''
        print('这个是失败的测试用例')
        res=calc(3,4)
        self.assertEqual(8,res)
    def test_haha(self):
        '''哈哈哈'''
        self.assertEqual(1,2)
if __name__=='__main__':
    unittest.main()

Para generar un informe de prueba, debe agregar otro módulo: HTMLTestRunner. Este módulo debe ser instalado por usted mismo.Después de ejecutar el caso de prueba, se generará un informe de prueba html, y estarán los resultados de ejecución de cada caso de prueba:

Copie el archivo HTMLTestRunner.py en Bibliotecas externas—>paquetes del sitio en pycharm

import unittest,HTMLTestRunner
def calc(x,y):
    return x+y
class TestCalc(unittest.TestCase):
    def test_pass_case(self):
        '''这个是通过测试用例'''
        print('这个是通过测试用例!')
        res=calc(1,2)
        self.assertEqual(3,res)
        self.assertNotEqual(4,res)#返回的结果不一样
    def setUp(self):
        #每个用例运行之前都会执行它
        print('我是setup')
    def tearDown(self):
        #每个用例运行完之后都会执行它
        print('我是tearDown')
    @classmethod
    def setUpClass(cls):
        #所有的用例执行之前执行一次
        print('我是setupClass')
    @classmethod
    def tearDownClass(cls):
        #所有用例都运行完之后执行一次
        print('我是tearDownClass')
    def test_a(self):
        '''这个是普通的测试用例'''
        print('a')
    def test_fail_case(self):
        '''这个是失败的测试用例'''
        print('这个是失败的测试用例')
        res=calc(3,4)
        self.assertEqual(8,res)
    def test_haha(self):
        '''哈哈哈'''
        self.assertEqual(1,2)
if __name__=='__main__':
    suite=unittest.TestSuite()#定义一个测试套件
    suite.addTest(TestCalc('test_pass_case'))#测试套件中添加测试用例
    suite.addTest(TestCalc('test_a'))
    suite.addTest(TestCalc('test_fail_case'))
    f=open('report.html','wb')#打开一个测试报告的文件
    runner=HTMLTestRunner.HTMLTestRunner(stream=f,title='wei测试结果',description='描述')#生成执行用例的对象
    runner.run(suite)#执行测试套件
import unittest,HTMLTestRunner
def calc(x,y):
    return x+y
class TestCalc(unittest.TestCase):
    def test_pass_case(self):
        '''这个是通过测试用例'''
        print('这个是通过测试用例!')
        res=calc(1,2)
        self.assertEqual(3,res)
        self.assertNotEqual(4,res)#返回的结果不一样
    def setUp(self):
        #每个用例运行之前都会执行它
        print('我是setup')
    def tearDown(self):
        #每个用例运行完之后都会执行它
        print('我是tearDown')
    @classmethod
    def setUpClass(cls):
        #所有的用例执行之前执行一次
        print('我是setupClass')
    @classmethod
    def tearDownClass(cls):
        #所有用例都运行完之后执行一次
        print('我是tearDownClass')
    def test_a(self):
        '''这个是普通的测试用例'''
        print('a')
    def test_fail_case(self):
        '''这个是失败的测试用例'''
        print('这个是失败的测试用例')
        res=calc(3,4)
        self.assertEqual(8,res)
    def test_haha(self):
        '''哈哈哈'''
        self.assertEqual(1,2)
if __name__=='__main__':
    suite=unittest.TestSuite()#定义一个测试套件
    suite.addTest(unittest.makeSuite(TestCalc))#这个类里面的所有测试用例
    f=open('report.html','wb')#打开一个测试报告的文件
    runner=HTMLTestRunner.HTMLTestRunner(stream=f,title='wei测试结果',description='描述')#生成执行用例的对象
    runner.run(suite)#执行测试套件

BeautifulReport: Lo mismo que HTMLTestRunner, pero el informe generado es más bonito y detallado. Descomprima el archivo BeautifulReport y cópielo en Bibliotecas externas—>paquetes de sitio en pycharm

import unittest
from BeautifulReport import BeautifulReport
def calc(x,y):
    return x+y
class TestCalc(unittest.TestCase):
    def test_pass_case(self):
        '''这个是通过测试用例'''
        print('这个是通过测试用例!')
        res=calc(1,2)
        self.assertEqual(3,res)
        self.assertNotEqual(4,res)#返回的结果不一样
    def setUp(self):
        #每个用例运行之前都会执行它
        print('我是setup')
    def tearDown(self):
        #每个用例运行完之后都会执行它
        print('我是tearDown')
    @classmethod
    def setUpClass(cls):
        #所有的用例执行之前执行一次
        print('我是setupClass')
    @classmethod
    def tearDownClass(cls):
        #所有用例都运行完之后执行一次
        print('我是tearDownClass')
    def test_a(self):
        '''这个是普通的测试用例'''
        print('a')
    def test_fail_case(self):
        '''这个是失败的测试用例'''
        print('这个是失败的测试用例')
        res=calc(3,4)
        self.assertEqual(8,res)
    def test_haha(self):
        '''哈哈哈'''
        self.assertEqual(1,2)
if __name__=='__main__':
    suite=unittest.TestSuite()#定义一个测试套件
    suite.addTest(unittest.makeSuite(TestCalc))#这个类里面的所有测试用例
    result=BeautifulReport(suite)
    result.report(filename='xiaoReport',description='描述',log_path='.')

Ejecute casos que no estén en el mismo archivo .py:

cases:同一个目录下的文件夹,包含三个python文件 test_buy,test_login,test_reg
import unittest

class TestBuy(unittest.TestCase):
    def test_a(self):
        self.assertEqual(1,1)

    def test_b(self):
        self.assertEqual(1,2)

class TestBuy2(unittest.TestCase):
    def test_buy_phone(self):
        self.assertEqual(1,1)



import unittest

class TestLogin(unittest.TestCase):
    def test_a(self):
        self.assertEqual(1,1)

    def test_b(self):
        self.assertEqual(1,2)


import unittest
class TestReg(unittest.TestCase):
    def test_a(self):
        self.assertEqual(1,1)

    def test_b(self):
        self.assertEqual(1,2)

class TestReg2(unittest.TestCase):
    def test_buy_phone(self):
        self.assertEqual(1,1)

El archivo run_all_cases.py prueba para ejecutar los casos de prueba anteriores:

import unittest
from BeautifulReport import BeautifulReport
suite=unittest.TestSuite()
all_case=unittest.defaultTestLoader.discover('cases','test_*.py')
[suite.addTest(case) for case in all_case]
result=BeautifulReport(suite)
result.report(filename='Bea测试报告',description='描述',log_path='.')

En la integración continua posterior, se usará Jenkins para ejecutar automáticamente el código, pero Jenkins no reconoce los informes de prueba en formato html. Por lo que es necesario generar un informe de prueba en un formato que reconozca Jenkins, formato xml. Todo lo que necesita para usar el módulo xmlrunner, simplemente instale xmlrunner directamente:

1 import unittest
2 import xmlrunner#为了以后给Jenkins看
3 suite=unittest.TestSuite()
4 all_case=unittest.defaultTestLoader.discover('cases','test_*.py')
5 # for case in all_case:
6 #     suite.addTest(case)
7 [suite.addTest(case) for case in all_case]#列表生成式,和上面代码是一样的
8 runner=xmlrunner.XMLTestRunner('.')#这是是为了产生报告给Jenkins看
#runner=xmlrunner.XMLTestRunner(output='report1')#指定生成目录
9 runner.run(suite)#运行用例

inserte la descripción de la imagen aquí
Si está interesado en las pruebas de software, quiere saber más sobre el conocimiento de las pruebas, resolver problemas de pruebas y obtener orientación para ayudarlo a resolver la confusión encontrada en las pruebas, tenemos expertos técnicos aquí. Si está buscando trabajo o se acaba de graduar de la escuela, o ya ha trabajado pero a menudo siente que es muy difícil, siente que no es lo suficientemente bueno en la prueba, quiere continuar sus estudios o quiere cambiar de carrera y tiene miedo de no poder aprender, puede unirse a nosotros inserte la descripción de la imagen aquí
Obtenga los últimos materiales de entrevista de fábrica de prueba de software y automatización de Python, interfaz, materiales de aprendizaje de construcción de marcos.

Supongo que te gusta

Origin blog.csdn.net/qq_42434318/article/details/113618341
Recomendado
Clasificación