searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Python 测试新手入门

2023-10-30 02:46:00
14
0

环境搭建

pip install -U pytest 
pip install -U unittest
pip install -U selenium

unittest单元测试框架

所有组件

  • Test Fixture 测试夹具 : 准备工作和收尾

  • Test Case 测试用例 : 通过assert来验证最小的测试单元,创建测试用例

  • Test Suite 测试套件 : 多个测试用例的集合

  • Test Runner 测试执行器 : 负责测试执行调度并且生成测试结果给用户

  • Test Report 测试报告 : 成功或者失败的汇总,预期结果和实际结果,还有运行情况和时间汇总

 

TestCase类

首先引入unittest, 引入一个继承TestCase的子类

import unittest from selenium 
import webdriver 
class SearchTest (unittest.TestCase):

 

setUp()方法

一个测试用例是从setUp()开始的,可以进行一些初始化任务,比如创建浏览器和访问URL,加载测试数据和打开日志文件。

class SearchTest (unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicity_wait(30)
        self.driver.maximize_window()
        
        self.driver.get("你需要访问的网址")

 

编写测试

def test_search_by_name(self):
    self.search_box = self.driver.find_element("css selector", "input[name='wd']")
    self.search_box.clear()
    
    self.search_box.send_keys("phones")
    self.search_box.send_keys(Keys.ENTER)
    self.driver.implicitly_wait(5)
    search_results = self.driver.find_elements("css selector", "div.result")
    self.assertAlmostEqual(8, len(search_results))

 

代码清理

def tearDown(self):
    self.driver.quit()

 

运行测试

if __name__ == '__main__':
    unittest.main(verbosity=2)

在 unittest.main() 中使用 verbosity 参数来控制测试运行时的详细程度。其中,参数值 2 表示最详细的输出级别。

具体而言,unittest 测试框架在执行测试时会根据不同的 verbosity 值输出不同级别的信息:

  • 0:仅输出测试结果的总结,即运行的测试用例的总数和失败的数量。

  • 1:在 0的基础上,输出每个测试用例的简要摘要,包括用例名称和结果。

  • 2:在 1的基础上,输出更详细的信息,包括每个测试用例的详细执行结果和日志。

因此,当使用 verbosity=2 时,测试框架将会输出最详细的信息,包括每个测试用例的详细结果、日志等,有助于在测试过程中进行更全面的调试和分析。

需要注意的是,在实际的测试运行中,根据你的需要可以选择不同的 verbosity 值以获得适当的输出详细程度。默认情况下,unittest.main() 的 verbosity 值为 1,可以根据需要进行自定义设置。

【注意】添加其他测试 也要以test开头

类级别的setUp()方法和tearDown()方法

其实每次都会打开一个浏览器来执行测试,可以通过testSetUp() testTearDown() 和 classmethod来实现。

以类级别初始化数据,每个测试方法共享

import unittest
from selenium.webdriver.common.keys import Keys
from selenium import webdriver

class SearchTests (unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(5)
        cls.driver.maximize_window()

        cls.driver.get("某度网址")

    def test_search_by_category(self):
        self.search_box = self.driver.find_element("css selector", "input[name='wd']")
        self.search_box.clear()

        self.search_box.send_keys("phones")
        self.search_box.send_keys(Keys.ENTER)
        self.driver.implicitly_wait(5)
        search_results = self.driver.find_elements("css selector", "div.result")
        self.assertAlmostEqual(8, len(search_results))

    @classmethod
    def tearDown(cls):
        cls.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

断言

常见的断言使用方法如下

  • assertEqual

  • assertAlmostEqual

  • assertLessEqual

 

测试套件

应用unittest的TestSuites特性,可以将不同的测试组成一个逻辑组

通过TestSuites\TestLoader\TestRunner类实现的

例如:新增一个HomePageTest类

smoketests.py


import unittest
from searchtests import SearchTest
from homepagetests import HomePageTest

search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTest)
home_page_tests = unittest.TestLoader().loadTestsFromTestCase(HomePageTest)

somke_tests = unittest.TestSuite([search_tests, home_page_tests])
unittest.TextTestRunner(verbosity=2).run(smoke_tests)

运行测试组冒烟测试

python smoketests.py

 

生成HTML格式的测试报告

需要手动下载这个文件

[HTMLTestRunner.py] 

【注意】可能会有一行报错  

self.stream.write(output.encode('utf8'))

需改成  self.stream.write(str(output))

完整的测试方法htmlsmoketests.py如下


import unittest
import HTMLTestRunner
from test_sample import SearchTests
import os

dir = os.getcwd()
search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTests)

smoke_tests = unittest.TestSuite([search_tests])

outfile = open(dir + '\SmokeTestReport.html', 'w')

runner = HTMLTestRunner.HTMLTestRunner(
    stream = outfile,
    title = 'Test Report',
    description = 'Smoke Tests'
)

runner.run(smoke_tests)

这样就可以在网页中看到结果啦~

【参考资料】Selenium自动化测试--基于Python语言

 

0条评论
0 / 1000
x****n
2文章数
0粉丝数
x****n
2 文章 | 0 粉丝
x****n
2文章数
0粉丝数
x****n
2 文章 | 0 粉丝
原创

Python 测试新手入门

2023-10-30 02:46:00
14
0

环境搭建

pip install -U pytest 
pip install -U unittest
pip install -U selenium

unittest单元测试框架

所有组件

  • Test Fixture 测试夹具 : 准备工作和收尾

  • Test Case 测试用例 : 通过assert来验证最小的测试单元,创建测试用例

  • Test Suite 测试套件 : 多个测试用例的集合

  • Test Runner 测试执行器 : 负责测试执行调度并且生成测试结果给用户

  • Test Report 测试报告 : 成功或者失败的汇总,预期结果和实际结果,还有运行情况和时间汇总

 

TestCase类

首先引入unittest, 引入一个继承TestCase的子类

import unittest from selenium 
import webdriver 
class SearchTest (unittest.TestCase):

 

setUp()方法

一个测试用例是从setUp()开始的,可以进行一些初始化任务,比如创建浏览器和访问URL,加载测试数据和打开日志文件。

class SearchTest (unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicity_wait(30)
        self.driver.maximize_window()
        
        self.driver.get("你需要访问的网址")

 

编写测试

def test_search_by_name(self):
    self.search_box = self.driver.find_element("css selector", "input[name='wd']")
    self.search_box.clear()
    
    self.search_box.send_keys("phones")
    self.search_box.send_keys(Keys.ENTER)
    self.driver.implicitly_wait(5)
    search_results = self.driver.find_elements("css selector", "div.result")
    self.assertAlmostEqual(8, len(search_results))

 

代码清理

def tearDown(self):
    self.driver.quit()

 

运行测试

if __name__ == '__main__':
    unittest.main(verbosity=2)

在 unittest.main() 中使用 verbosity 参数来控制测试运行时的详细程度。其中,参数值 2 表示最详细的输出级别。

具体而言,unittest 测试框架在执行测试时会根据不同的 verbosity 值输出不同级别的信息:

  • 0:仅输出测试结果的总结,即运行的测试用例的总数和失败的数量。

  • 1:在 0的基础上,输出每个测试用例的简要摘要,包括用例名称和结果。

  • 2:在 1的基础上,输出更详细的信息,包括每个测试用例的详细执行结果和日志。

因此,当使用 verbosity=2 时,测试框架将会输出最详细的信息,包括每个测试用例的详细结果、日志等,有助于在测试过程中进行更全面的调试和分析。

需要注意的是,在实际的测试运行中,根据你的需要可以选择不同的 verbosity 值以获得适当的输出详细程度。默认情况下,unittest.main() 的 verbosity 值为 1,可以根据需要进行自定义设置。

【注意】添加其他测试 也要以test开头

类级别的setUp()方法和tearDown()方法

其实每次都会打开一个浏览器来执行测试,可以通过testSetUp() testTearDown() 和 classmethod来实现。

以类级别初始化数据,每个测试方法共享

import unittest
from selenium.webdriver.common.keys import Keys
from selenium import webdriver

class SearchTests (unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(5)
        cls.driver.maximize_window()

        cls.driver.get("某度网址")

    def test_search_by_category(self):
        self.search_box = self.driver.find_element("css selector", "input[name='wd']")
        self.search_box.clear()

        self.search_box.send_keys("phones")
        self.search_box.send_keys(Keys.ENTER)
        self.driver.implicitly_wait(5)
        search_results = self.driver.find_elements("css selector", "div.result")
        self.assertAlmostEqual(8, len(search_results))

    @classmethod
    def tearDown(cls):
        cls.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

断言

常见的断言使用方法如下

  • assertEqual

  • assertAlmostEqual

  • assertLessEqual

 

测试套件

应用unittest的TestSuites特性,可以将不同的测试组成一个逻辑组

通过TestSuites\TestLoader\TestRunner类实现的

例如:新增一个HomePageTest类

smoketests.py


import unittest
from searchtests import SearchTest
from homepagetests import HomePageTest

search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTest)
home_page_tests = unittest.TestLoader().loadTestsFromTestCase(HomePageTest)

somke_tests = unittest.TestSuite([search_tests, home_page_tests])
unittest.TextTestRunner(verbosity=2).run(smoke_tests)

运行测试组冒烟测试

python smoketests.py

 

生成HTML格式的测试报告

需要手动下载这个文件

[HTMLTestRunner.py] 

【注意】可能会有一行报错  

self.stream.write(output.encode('utf8'))

需改成  self.stream.write(str(output))

完整的测试方法htmlsmoketests.py如下


import unittest
import HTMLTestRunner
from test_sample import SearchTests
import os

dir = os.getcwd()
search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTests)

smoke_tests = unittest.TestSuite([search_tests])

outfile = open(dir + '\SmokeTestReport.html', 'w')

runner = HTMLTestRunner.HTMLTestRunner(
    stream = outfile,
    title = 'Test Report',
    description = 'Smoke Tests'
)

runner.run(smoke_tests)

这样就可以在网页中看到结果啦~

【参考资料】Selenium自动化测试--基于Python语言

 

文章来自个人专栏
Python 测试新手入门
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0