Vamos falar sobre testes unitários

A estrutura de teste de unidade que acompanha o Python é o módulo unittest, que inclui alguns métodos para verificar os resultados retornados e algumas operações de inicialização antes da execução do caso de uso;

TestCase é o caso de teste

TestSuite vários casos de teste juntos

TestLoader é usado para carregar TestCase no TestSuite

TestRunner é usado para executar casos de teste e os resultados do teste serão salvos na instância TestResult, incluindo quantos casos de teste foram executados, quantos foram bem-sucedidos e quantos falharam.

Caso de teste unitário simples:

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 gerar um relatório de teste, você precisa adicionar outro módulo: HTMLTestRunner. Este módulo precisa ser instalado por você mesmo. Após a execução do caso de teste, será gerado um relatório de teste html, e haverá os resultados da execução de cada caso de teste:

Copie o arquivo HTMLTestRunner.py para External Libraries—>site-packages in 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: Igual ao HTMLTestRunner, porém o relatório gerado é mais bonito e detalhado. Descompacte o arquivo BeautifulReport e copie-o para External Libraries—>site-packages in 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='.')

Execute casos que não estejam no mesmo arquivo .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)

O arquivo run_all_cases.py testa para executar os casos de teste acima:

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='.')

Na integração contínua subsequente, o Jenkins será usado para executar o código automaticamente, mas o Jenkins não reconhece os relatórios de teste no formato html. Portanto, é necessário gerar um relatório de teste em um formato que o Jenkins reconheça, formato xml. Tudo o que você precisa para usar o módulo xmlrunner, apenas pip install xmlrunner diretamente:

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)#运行用例

insira a descrição da imagem aqui
Se você estiver interessado em teste de software, quiser saber mais sobre o conhecimento de teste, resolver problemas de teste e obter orientações para ajudá-lo a resolver a confusão encontrada nos testes, temos especialistas técnicos aqui. Se você está procurando emprego ou acabou de se formar na escola, ou já trabalhou, mas muitas vezes sente que é muito difícil, sente que não é bom o suficiente no teste, quer continuar seus estudos ou quer mudar de carreira e tem medo de não ser capaz de aprender, você pode se juntar a nós insira a descrição da imagem aqui
. Obtenha os mais recentes materiais de entrevista de fábrica de teste de software e automação de Python, interface, materiais de aprendizado de construção de estrutura!

Acho que você gosta

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