python自动化测试三部曲之unittest框架的实现

下面我将为你详细讲解“python自动化测试三部曲之unittest框架的实现”的完整攻略。

一、什么是unittest框架

unittest框架是Python自带的一个单元测试框架,用于编写单元测试用例并进行自动化测试。

常用的单元测试框架包括unittest、pytest等,在学习自动化测试时需多了解这些框架的原理与使用方法。

二、unittest框架的实现

1. 编写测试用例

编写测试用例是unittest的第一步。在unittest中,每个测试用例都是一个函数,命名规范为test_开头。下面是一个简单的测试用例:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

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

在这个测试用例中,我们使用unittest模块中的TestCase类,该类提供了很多内置的断言方法(如assertEqual、assertTrue等)用于判断测试结果是否符合预期。

2. 运行测试用例

运行测试用例的方式有两种,一种是使用命令行方式,另一种是使用PyCharm等IDE工具。

命令行方式:

在命令行中执行python xxx.py即可运行测试用例。其中,xxx.py为测试用例所在的Python文件名。

IDE工具方式:

在PyCharm中,运行测试用例分为两种方式:一种是右键点击测试用例文件中的类或者方法名,选择Run 'xxx'即可运行;另一种是在PyCharm的Run界面中新建Python测试配置,选择要运行的测试用例文件及对应的测试方法名。

3. 测试报告生成

测试报告的生成可以使用xmlrunner、HtmlTestRunner等第三方库,也可以使用unittest自带的TextTestRunner。

使用TextTestRunner生成测试报告的示例如下:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
    unittest.TextTestRunner(verbosity=2).run(suite)

在以上示例中,通过unittest.TestLoader().loadTestsFromTestCase()方法加载测试用例,再将测试结果输出到控制台。

三、示例说明

1. 自动化测试网站登陆功能

下面是一个示例,用unittest框架实现一个网站的登陆功能测试用例。

import unittest
from selenium import webdriver

class TestLogin(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()   # 初始化浏览器
        self.driver.get('https://www.example.com')  # 打开被测网站

    def test_login_success(self):
        driver = self.driver
        # 执行登录操作
        driver.find_element_by_id('username').send_keys('user')
        driver.find_element_by_id('password').send_keys('passwd')
        driver.find_element_by_id('submit').click()
        # 断言:判断登录是否成功
        self.assertIn('欢迎您', driver.page_source)

    def test_login_failure(self):
        driver = self.driver
        # 执行登录操作
        driver.find_element_by_id('username').send_keys('wrong_user')
        driver.find_element_by_id('password').send_keys('wrong_passwd')
        driver.find_element_by_id('submit').click()
        # 断言:判断登录失败信息是否显示
        self.assertIn('用户名或密码错误', driver.page_source)

    def tearDown(self):
        self.driver.quit()  # 关闭浏览器

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

在这个示例中,我们使用unittest框架编写了两个测试用例:test_login_success和test_login_failure,分别测试了登录成功和登录失败的情景,并用断言方式进行验证。

2. 自动化测试API接口

下面是一个示例,用requests库和unittest框架实现一个接口测试的用例。

import unittest
import requests

class TestApi(unittest.TestCase):

    def test_get_user_info(self):
        # 使用requests库请求目标接口
        url = 'https://api.example.com/userinfo'
        headers = {'Authorization': 'Bearer ' + self.token}
        response = requests.get(url, headers=headers)
        # 断言:判断返回状态码和响应内容是否符合预期
        self.assertEqual(200, response.status_code)
        self.assertEqual('Alice', response.json().get('name'))

    def test_update_user_info(self):
        # 使用requests库请求目标接口
        url = 'https://api.example.com/userinfo'
        headers = {'Authorization': 'Bearer ' + self.token}
        data = {'name': 'Bob'}
        response = requests.put(url, headers=headers, json=data)
        # 断言:判断返回状态码和响应内容是否符合预期
        self.assertEqual(200, response.status_code)
        self.assertEqual('Bob', response.json().get('name'))

    def setUp(self):
        # 获取接口token并存储在self.token中
        self.token = 'xxxxxxxx'

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

在这个示例中,我们使用requests库发送get和put请求,并在每个测试用例中添加了相应的断言判断。其中,setUp()函数用于前置处理,获取API接口的token并存储在变量self.token中,用于每个测试用例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动化测试三部曲之unittest框架的实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python如何求数组连续最大和的示例代码

    求一个数组的连续最大和可以采用动态规划的思想,下面是具体的攻略。 思路 设$dp[i]$表示以第$i$个数结尾的最大子段和,因此我们有了如下的动态转移方程:$$ dp[i] = \max(dp[i-1]+nums[i],nums[i]) $$ 其中变量$nums$为原始的数组,对于第一个数$nums[0]$,我们可以将其看做以第0个数结尾的最大子段和,因此$…

    python 2023年6月5日
    00
  • Python把csv数据写入list和字典类型的变量脚本方法

    在Python中,我们可以使用csv模块来读取和写入CSV文件。CSV文件是一种常见的数据格式,通常用于存储表格数据。本文将介绍如何将CSV数据写入list和字典的变量。 将CSV数据写入list 我们可以使用csv模块的writer()函数将CSV数据写入list中。下面是一个示例: import csv # 写入CSV数据到list data = [[‘…

    python 2023年5月13日
    00
  • Python中easy_install 和 pip 的安装及使用

    Python中的easy_install和pip是两个常用的包管理工具,它们可用于安装Python模块或库,并自动处理依赖关系,简化了Python包的安装过程。下面将详细讲解easy_install和pip的安装及使用。 安装easy_install 安装easy_install的方式有多种,这里以使用安装setuptools工具包的方式为例: 下载setu…

    python 2023年5月14日
    00
  • Python如何自动获取目标网站最新通知

    Python如何自动获取目标网站最新通知 在本攻略中,我们将介绍如何使用Python自动获取目标网站的最新通知。我们可以使用Python的requests库和beautifulsoup4库来实现这个功能。 步骤1:使用requests库获取网页内容 使用以下代码可以使用requests库获取网页内容: import requests url = ‘https…

    python 2023年5月15日
    00
  • python json.dumps中文乱码问题解决

    让我来讲解一下“python json.dumps中文乱码问题解决”的攻略。 问题描述 在Python中,我们经常会使用json.dumps方法将一个Python对象转换成Json格式的字符串。但是在使用json.dumps方法转换包含中文字符的Python对象时,有时会出现中文乱码的问题,严重影响程序的可读性和实用性。因此,如何解决json.dumps方法…

    python 2023年5月20日
    00
  • 教你用Python读取CSV文件的5种方式

    教你用Python读取CSV文件的5种方式 CSV是一种常见的数据格式,如果你需要使用Python对CSV文件进行处理,这篇文章将会教你5种读取CSV文件的方式。 方法1: 使用csv.reader csv.reader是Python内置模块csv中用于读取CSV文件的函数。我们首先需要导入csv模块,然后使用csv.reader打开文件并读取CSV内容。 …

    python 2023年6月3日
    00
  • 获取python文件扩展名和文件名方法

    获取Python文件扩展名和文件名的方法涉及到从文件路径中提取出文件名和扩展名的操作。下面是获取Python文件扩展名和文件名的方法攻略: 获取Python文件扩展名和文件名的方法 简介 通常,Python中的文件处理模块 os 和 os.path 提供了许多内置函数和方法来处理文件路径。其中 os.path 模块具有很多有用的方法可以帮助我们从文件路径中提…

    python 2023年6月5日
    00
  • python抓取并保存html页面时乱码问题的解决方法

    Python抓取并保存HTML页面时乱码问题的解决方法 在使用Python抓取并保存HTML页面时,有时会遇到乱码问题。本文将介绍两种解决乱码问题的方法。 方法1:指定编码方式 在使用Python抓取HTML页面时,我们可以指定编码方式来解决乱码问题。以下是示例代码: import requests # 指定编码方式 response = requests.…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部