29. 使用参数化编写自动化测试用例

通过上面代码我们发现,我们调的都是登录的接口,只是传参不一样,这么写容易造成代码量过多,所以我们可以使用参数化编写测试用例,参数化我们可以使用parameterized模块,关于更多可parameterized使用方法,可访问parameterized官网,优化后的代码如下(我们更新了用户,用户名admin,密码123456):

# -*- coding: utf-8 -*-
import requests
import unittest
from parameterized import parameterized

class BlogTest(unittest.TestCase):

    def setUp(self):
        self.url = "http://127.0.0.1:8000/"
        self.username = 'admin'
        self.password = '123456'

    def tearDown(self):
        pass

    @parameterized.expand([
        ("01", "", "admin111111", 0, 'username or password null'),
        ("02", "admin", "", 0, "username or password null"),
        ("03", "", "", 0, "username or password null"),
        ("04", "admin1", "admin111111", 0, "username or password error"),
        ("05", "admin", "admin1111112", 0, "username or password error"),
        ("06", "admin1", "admin1111112", 0, "username or password error"),
        ("07", "admin", "123456", 1, "login success"),
    ])
    def test_login(self, testcase_number, username, password, status, msg):
        url = self.url + 'login'
        payload = {'username': username, 'password': password}
        self.result = requests.post(url, payload).json()
        # print(self.result)
        self.assertEqual(self.result['status'], status)
        self.assertEqual(self.result['message'], msg)

    def test_request_type_error(self):
        url = self.url + 'login'
        payload = {'username': self.username, 'password': self.password}
        self.result = requests.get(url, payload).json()
        # print(self.result)
        self.assertEqual(self.result['status'], 0)
        self.assertEqual(self.result['message'], 'request type error')

    @parameterized.expand([
        ("01", "", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         'id or title or author or content null'),
        ("02", "1", "", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         'id or title or author or content null'),
        ("03", "2", "乡愁", "", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         'id or title or author or content null'),
        ("04", "3", "乡愁", "余光中", '', 0, 'id or title or author or content null'),
        ("05", "5", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头',
         1, "add article success"),
        ("06", "1", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头',
         0, "article id already exists"),
        ("07", "3", "乡愁标题过长大于10个字符", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头',
         0, '博客标题过长'),
        ("08", "4", "乡愁", "余光中作者名称过长大于10个字符", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头',
         0, '作者名称过长'),

    ])
    def test_create_blog(self, testcase_number, b_id, title, author, content, status, msg):
        """使用参数化测试创建blog"""
        url = self.url + 'add_article'
        payload = {'id': b_id, 'title': title, 'author': author, 'content': content}
        self.result = requests.post(url, payload).json()
        # print(self.result)
        # self.assertEqual(self.result['status'], status)
        self.assertEqual(self.result['message'], msg)

    @parameterized.expand([
        ("01", "10", 1, 'delete article success'),
        ("02", "11", 0, 'id not exist'),
        ("03", "aa", 0, '参数类型错误'),

    ])
    def test_delete_blog(self, testcase_number, b_id, status, msg):
        """使用参数化测试删除blog 先创建一个blog"""

        create_blog_url = self.url + 'add_article'
        payload = {'id': '10', 'title': '乡愁',
                   'author': '余光中', 'content': '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头'}
        requests.post(create_blog_url, payload).json()

        url = self.url + 'delete_article'
        payload = {'id': b_id}
        self.result = requests.post(url, payload).json()
        # print(self.result)
        self.assertEqual(self.result['status'], status)
        self.assertEqual(self.result['message'], msg)

    @parameterized.expand([
        ("01", "", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         'id or title or author or content null'),
        ("02", "12", "", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         'id or title or author or content null'),
        ("03", "12", "乡愁", "", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         'id or title or author or content null'),
        ("04", "12", "乡愁", "余光中", '', 0, 'id or title or author or content null'),
        ("05", "12", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头1',
         1, "modify article success"),
        ("06", "12", "乡愁标题过长大于10个字符", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头',
         0, '博客标题过长'),
        ("07", "12", "乡愁", "余光中作者名称过长大于10个字符", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头',
         0, '作者名称过长'),
        ("08", "aa", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0,
         '参数类型错误'),
        ("09", "13", "乡愁", "余光中", '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头', 0, 'article not exist'),
    ])
    def test_modify_blog(self, testcase_number, b_id, title, author, content, status, msg):
        """使用参数化测试修改blog 先创建一个blog"""

        create_blog_url = self.url + 'add_article'
        payload = {'id': '12', 'title': '乡愁',
                   'author': '余光中', 'content': '小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头'}
        requests.post(create_blog_url, payload).json()

        url = self.url + 'modify_article'
        payload = {'id': b_id, 'title': title, 'author': author, 'content': content}
        self.result = requests.post(url, payload).json()
        # print(self.result)
        self.assertEqual(self.result['status'], status)
        self.assertEqual(self.result['message'], msg)

    def test_query_blog(self):
        """查询blog, 不带条件"""

        create_blog_url = self.url + 'add_article'
        payload = {'id': '14', 'title': '采蘑菇',
                   'author': 'testDog', 'content': '采蘑菇的小姑娘,背着一个大箩筐'}
        requests.post(create_blog_url, payload).json()

        url = self.url + 'get_article'
        payload2 = {}
        self.result = requests.post(url, payload2).json()
        # print(self.result)
        self.assertEqual(self.result['status'], 1)
        self.assertEqual(self.result['message'], 'success')

    def test_query_title_blog(self):
        """根据标题查询blog"""
        title = "跳皮绳"
        create_blog_url = self.url + 'add_article'
        payload = {'id': '15', 'title': title,
                   'author': 'testDog', 'content': '采蘑菇的小姑娘,喜欢跳皮绳'}
        self.result = requests.post(create_blog_url, payload).json()
        # print(self.result)
        url = self.url + 'get_article'
        payload = {"title": title}
        self.result = requests.post(url, payload).json()
        # print(self.result)
        self.assertEqual(self.result['status'], 1)
        self.assertEqual(self.result['message'], 'success')
        self.assertEqual(self.result['data'][0]['title'], title)

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

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

原文地址:https://www.cnblogs.com/suim1218/p/11022477.html

时间: 2024-08-06 10:46:55

29. 使用参数化编写自动化测试用例的相关文章

最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写测试用例即可,其他模板可以套用的,希望帮助到大家. 目录 一.编写测试用例 二.执行测试用例,查找最新测试用例,自动发送测试报告 三.定时执行测试用例 3.1方案一:Windows任务计划 3.2方案二:Jenkins持续集成 四.成果验收 环境准备: 操作系统:Windows7 集成开发环境:ec

用java和junit编写app自动化测试用例

package myTest; import static org.junit.Assert.*; import io.appium.java_client.android.AndroidDriver; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import

用python和unittest编写app自动化测试用例

import unittest import webdriver import time class Test(unittest.TestCase): @classmethod def setUpClass(self): cap = {} cap['platformName'] = 'Android' cap['platformVersion'] = '4.4.2' cap['deviceName'] = '7N2SSE158P001892' cap['noReset'] = 'noReset'

三. 自动化测试用例设计

1.  主要内容:   2.  手工测试用例与自动化测试用例区别 目前自动化测试更多的时候是定位在冒烟测试和回归测试: 冒烟测试执行的是主体功能点的用例. 回归测试执行全部或部分的测试用例. 3.  测试类型 4.  异常 5.  WebDriver错误截图 get_screenshot_as_file()函数将截取当前页面的截图保存到指定的位置. 1 # coding = utf-8 2 from selenium import webdriver 3 4 driver = webdriver

Selenium 2自动化测试实战34(编写Web测试用例)

编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------test_baidu.py------------test_google.py------report/------------login.txt------runtest.py目录结构如下图所示: 创建web测试用例. #test_baidu.py #coding:utf-8 from seleniu

linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本

红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版本非常多,相关的编译器,解释器也有很多,很多还有最小系统,嵌入式系统等等.同一功能的软件如果只有编译好的软件包,在其它linux的平台上,可能并不能正常安装运行,在此情况下,源码包编译安装出现了.所以本文的重点是以nginx为例,给出源码包编译安装的详细过程,同时带你手工编写自动化运行脚本. 准备工

Jasmine 编写 JavaScript 测试用例

1,下载Jasmine 包,主要包括如下三个文件: 1>,jasmine-html.js,jasmine.css,jasmine.js 2>,编写测试用例,代码如下: describe("Examples of Jasmine suite", function() { //List 1 describe("This is an exmaple suite", function() { it("contains spec with an expe

如何编写有效测试用例

转载 如何编写有效测试用例 测试用例,是一份关于具体测试步骤的文档,它描述了测试的输入参数.条件及配置.预期的输出结果等,以判断被测软件的工作是否正常. 设计.书写和执行测试案例是测试活动中重要的组成部分,测试案例通常由测试案例管理系统或工具进行管理. 一.编写测试用例的原则 测试用例的重要性是毋庸置疑的,它是软件测试全部过程的核心,是测试执行环节的基本依据.测试用例编写应该遵循的原则: 测试用例要达到最大覆盖软件系统的功能点. 测试用例对测试功能点.测试条件.测试步骤.输入值和预期结果应该有准

自动化测试用例与手工测试用例应用的区别

手工测试用例是针对手工测试人员,自动化测试用 例是针对自动化测试框架,前者是手工测试用例人员应用手工方式进行用例解析,后者是应用脚本技术进行用例解析,两者最大的各自特点在于,前者具有较好的异 常处理能力,而且能够基于测试用例,制造各种不同的逻辑判断,而且人工测试步步跟踪,能够细致的定位问题.而后者是完全按照测试用例的方式测试,而且异常 处理能力不强,往往一个自动化测试用例运行完毕后,报一堆错误,对于测试人员来定位错误是一个难点,这样往往发现的问题很少.所以,根据其各自的特点,需 要将两者有很好的