29. 使用參數化編寫自動化測試用例

經過上面代碼咱們發現,咱們調的都是登陸的接口,只是傳參不同,這麼寫容易形成代碼量過多,因此咱們能夠使用參數化編寫測試用例,參數化咱們能夠使用parameterized模塊,關於更多可parameterized使用方法,可訪問parameterized官網,優化後的代碼以下(咱們更新了用戶,用戶名admin,密碼123456):json

# -*- 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微信

相關文章
相關標籤/搜索