29. 使用參數(shù)化編寫自動化測試用例

通過上面代碼我們發(fā)現(xiàn),我們調(diào)的都是登錄的接口,只是傳參不一樣,這么寫容易造成代碼量過多,所以我們可以使用參數(shù)化編寫測試用例,參數(shù)化我們可以使用parameterized模塊,關(guān)于更多可parameterized使用方法,可訪問parameterized官網(wǎng),優(yōu)化后的代碼如下(我們更新了用戶,用戶名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", "", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0,'id or title or author or content null'),
        ("02", "1", "", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0,'id or title or author or content null'),
        ("03", "2", "鄉(xiāng)愁", "", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0,'id or title or author or content null'),
        ("04", "3", "鄉(xiāng)愁", "余光中", '', 0, 'id or title or author or content null'),
        ("05", "5", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭',1, "add article success"),
        ("06", "1", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭',0, "article id already exists"),
        ("07", "3", "鄉(xiāng)愁標(biāo)題過長大于10個(gè)字符", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭',0, '博客標(biāo)題過長'),
        ("08", "4", "鄉(xiāng)愁", "余光中作者名稱過長大于10個(gè)字符", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭',0, '作者名稱過長'),

    ])
    def test_create_blog(self, testcase_number, b_id, title, author, content, status, msg):
        """使用參數(shù)化測試創(chuàng)建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, '參數(shù)類型錯(cuò)誤'),

    ])
    def test_delete_blog(self, testcase_number, b_id, status, msg):
        """使用參數(shù)化測試刪除blog 先創(chuàng)建一個(gè)blog"""

        create_blog_url = self.url + 'add_article'
        payload = {'id': '10', 'title': '鄉(xiāng)愁','author': '余光中', 'content': '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭'}
        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", "", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0, 'id or title or author or content null'),
        ("02", "12", "", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0,'id or title or author or content null'),
        ("03", "12", "鄉(xiāng)愁", "", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0,'id or title or author or content null'),
        ("04", "12", "鄉(xiāng)愁", "余光中", '', 0, 'id or title or author or content null'),
        ("05", "12", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭1',1, "modify article success"),
        ("06", "12", "鄉(xiāng)愁標(biāo)題過長大于10個(gè)字符", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭',0, '博客標(biāo)題過長'),
        ("07", "12", "鄉(xiāng)愁", "余光中作者名稱過長大于10個(gè)字符", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭',0, '作者名稱過長'),
        ("08", "aa", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0,'參數(shù)類型錯(cuò)誤'),
        ("09", "13", "鄉(xiāng)愁", "余光中", '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭', 0, 'article not exist'),
    ])
    def test_modify_blog(self, testcase_number, b_id, title, author, content, status, msg):
        """使用參數(shù)化測試修改blog 先創(chuàng)建一個(gè)blog"""

        create_blog_url = self.url + 'add_article'
        payload = {'id': '12', 'title': '鄉(xiāng)愁', 'author': '余光中', 'content': '小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,
我在這頭,母親在那頭。長大后,鄉(xiāng)愁是一張窄窄的船票,我在這頭,新娘在那頭'}
        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': '采蘑菇的小姑娘,背著一個(gè)大籮筐'}
        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):
        """根據(jù)標(biāo)題查詢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()

軟件測試汪簡書地址
軟件測試汪博客地址

歡迎關(guān)注微信公眾號:軟件測試汪。軟件測試交流群:809111560

轉(zhuǎn)載請注意出處,謝謝合作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容