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

yizhihongxing

下面我将为你详细讲解“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操作mysql数据库实现增删查改功能的方法

    Python操作MySQL数据库实现增删查改功能的方法 1. 安装Python的MySQL模块 在Python中操作MySQL需要使用到MySQL模块,可以使用pip来安装: pip install mysql-connector-python 2. 连接到MySQL数据库 连接到MySQL数据库需要使用到相应的参数,比如主机名、用户名、密码、数据库名等。可…

    python 2023年6月3日
    00
  • Python property、setter、deleter

    面向对象封装特点之一就是通过实现好的方法来访问,限制对数据的不合理访问,把对象状态私有化,仅供类的内部进行操作 下方示例,Test方法的number属性类实例的时候传递1,number是一个公开属性,可以在外部任意修改、访问,没有对属性进行进行约束 class Test: def __init__(self,number) self.number = num…

    python 2023年4月18日
    00
  • python ip正则式

    以下是详细讲解“Python IP正则表达式”的完整攻略,包括IP地址的格式、IP地址的正则表达式、以及两个示例说明。 IP地址的格式 IP地址是指互网协议地址是用于标识互联网上的设备的数字标识。IP地址通常由四个十进制数组成,每数的取值范围是0到255,中间用点号分隔。例如,192.168.1.1就是一个IP地址。 IP地址的正则表达式 在Python中,…

    python 2023年5月14日
    00
  • 用python爬取豆瓣前一百电影

    用Python爬取豆瓣前100电影的完整攻略 在本攻略中,我们将介绍如何使用Python爬取豆瓣前100电影,并提供两个示例。 步骤1:分析网页 在使用Python爬取豆瓣前100电影之前,我们需要先分析网页。我们可以使用Chrome浏览器的开发者工具分析网页。 以下是分析网页的步骤: 打开Chrome浏览器,进入豆瓣电影排行榜页面。 点击开发者工具,进入开…

    python 2023年5月15日
    00
  • Linux常用命令与命令缩写整理

    Linux常用命令与命令缩写整理 Linux命令概述 Linux命令是操作Linux系统时的重要工具,Linux命令具有清晰、简洁、高效等优点,它们可以提高操作效率,降低出错率,同时Linux命令也是Linux系统知识体系的重要组成部分。 命令分类 Linux命令在功能上可分为以下几类: 系统管理命令:主要用于对系统进行管理和维护。 用户管理命令:用于管理用…

    python 2023年6月3日
    00
  • Python实现以主程序的形式执行模块

    Python实现以主程序的形式执行模块可以通过以下步骤来完成: 1. 编写模块文件 编写一个python模块,作为后续需要执行的主程序。此模块文件需要包含入口函数。例如,我们创建一个名为example_module.py的模块,并添加以下代码: def main(): print("Hello, World!") if __name__ …

    python 2023年5月30日
    00
  • 如何在Python中插入数据到Microsoft SQL Server数据库?

    以下是如何在Python中插入数据到Microsoft SQL Server数据库的完整使用攻略,包括安装pyodbc库、连接Microsoft SQL Server数据库、插入数据等步骤。同时,提供了两个示例以便更好理解如何在Python中插入数据到Microsoft SQL Server数据库。 步骤1:安装pyodbc库 在Python中,我们可以使用…

    python 2023年5月12日
    00
  • 如何在NumPy数组上映射一个函数

    在NumPy中,使用vectorize()函数可以在数组上映射函数。使用该函数,可以将一个接受标量输入并返回标量输出的Python函数转换为可用于接受NumPy数组并返回NumPy数组的函数。以下是在NumPy数组上映射函数的步骤: 步骤1:定义一个原始函数 定义一个Python函数,该函数接受标量输入并返回标量输出。例如,我们可以定义一个函数来计算平方。 …

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部