国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】

這篇具有很好參考價值的文章主要介紹了Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

相關(guān)文章:

Django實現(xiàn)接口自動化平臺(十三)接口模塊Interfaces序列化器及視圖【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客

本章是項目的一個分解,查看本章內(nèi)容時,要結(jié)合整體項目代碼來看:

python django vue httprunner 實現(xiàn)接口自動化平臺(最終版)_python+vue自動化測試平臺_做測試的喵醬的博客-CSDN博客

一、Testcases應(yīng)用及相關(guān)接口

請求方式 URI 對應(yīng)action 實現(xiàn)功能
GET /testcases/ .list() 查詢testcase列表
POST /testcases/ .create() 創(chuàng)建一條數(shù)據(jù)
GET /testcases/{id}/ .retrieve() 檢索一條testcase的詳細(xì)數(shù)據(jù)
PUT /testcases/{id}/ update() 更新一條數(shù)據(jù)中的全部字段
PATCH /testcases/{id}/ .partial_update() 更新一條數(shù)據(jù)中的部分字段
DELETE /testcases/{id}/ .destroy() 刪除一條數(shù)據(jù)
POST /testcases/{id}/run/ 運(yùn)行某個接口下的所有case

?1.1 用例列表

GET /testcases/ .list() 查詢testcase列表

Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】,Django實現(xiàn)測試平臺,Python,django,自動化,python

1.2 創(chuàng)建用例?

1.2.1 基本信息

Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】,Django實現(xiàn)測試平臺,Python,django,自動化,python

?1、拉取了項目列表

2、拉取了項目下的接口列表

3、前置用例列表

4、拉取了所有的配置列表

1.2.2?基本信息

Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】,Django實現(xiàn)測試平臺,Python,django,自動化,python

?Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】,Django實現(xiàn)測試平臺,Python,django,自動化,python

?

二、模型類

from django.db import models

from utils.base_models import BaseModel


class Interfaces(BaseModel):
    id = models.AutoField(verbose_name='id主鍵', primary_key=True, help_text='id主鍵')
    name = models.CharField('接口名稱', max_length=200, unique=True, help_text='接口名稱')
    project = models.ForeignKey('projects.Projects', on_delete=models.CASCADE,
                                related_name='interfaces', help_text='所屬項目')
    tester = models.CharField('測試人員', max_length=50, help_text='測試人員')
    desc = models.CharField('簡要描述', max_length=200, null=True, blank=True, help_text='簡要描述')

    class Meta:
        db_table = 'tb_interfaces'
        verbose_name = '接口信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

這段代碼定義了一個名為Testcases的Django模型類,繼承了BaseModel。

首先,通過from django.db import models導(dǎo)入了Django的models模塊和自定義的BaseModel模塊。

然后,定義了Testcases模型類,它包含了以下字段:

  • id:主鍵字段,使用AutoField類型生成自增的id。
  • name:用例名稱字段,使用CharField類型,最大長度為50,設(shè)置為唯一值。
  • interface:外鍵字段,關(guān)聯(lián)到interfaces.Interfaces模型,表示該用例所屬的接口。
  • include:前置字段,使用TextField類型,允許為空,保存用例執(zhí)行前需要執(zhí)行的順序信息。
  • author:編寫人員字段,使用CharField類型,最大長度為50,保存編寫該用例的人員信息。
  • request:請求信息字段,使用TextField類型,保存請求的詳細(xì)信息。

接下來,定義了該模型類的Meta類,包含了一些元數(shù)據(jù):

  • db_table:數(shù)據(jù)庫表的名稱,設(shè)置為tb_testcases。
  • verbose_name:該模型的可讀名稱,設(shè)置為'用例信息'。
  • verbose_name_plural:該模型的復(fù)數(shù)形式名稱,與verbose_name相同。
  • ordering:查詢結(jié)果的默認(rèn)排序規(guī)則,按照id字段進(jìn)行升序排序。

最后,定義了__str__方法,返回用例的名稱,用于在后臺管理界面和其他地方顯示該模型對象的可讀信息。

通過以上定義,您可以使用Django框架創(chuàng)建一個名為Testcases的數(shù)據(jù)表,其中包含了上述定義的字段,并且可以進(jìn)行數(shù)據(jù)操作和查詢。

注意:

所有請求相關(guān)的信息,如header、URI、請求體、斷言等等,全部在模型類?request字段中

Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】,Django實現(xiàn)測試平臺,Python,django,自動化,python

request的值,是一個json字符串。如:

{
	"test": {
		"name": "1陳帥百度",
		"request": {
			"url": "/mcp/pc/pcsearch",
			"method": "POST",
			"json": {
				"invoke_info": {
					"pos_1": [{}],
					"pos_2": [{}],
					"pos_3": [{}]
				}
			}
		},
		"validate": [{
			"check": "status_code",
			"expected": 200,
			"comparator": "equals"
		}]
	}
}

包含了請求與斷言的信息。

底層使用的httprunner 1.0 做的接口自動化驅(qū)動,case的形式,就是json格式的。

相關(guān)資料:

httprunner 2.x的基本使用(二)_做測試的喵醬的博客-CSDN博客

三、序列化器類


class TestcaseModelSerializer(serializers.ModelSerializer):
    interface = InterfaceProjectModelSerializer(label='所屬項目和接口信息', help_text='所屬項目和接口信息')

    class Meta:
        model = Testcases
        exclude = ('create_datetime', 'update_datetime')
        extra_kwargs = {
            'request': {
                'write_only': True
            },
            'include': {
                'write_only': True
            },
        }

    # def validate_request(self, attr):
    #     # TODO
    #     return attr
    #
    # def validate(self, attrs):
    #     # TODO
    #     return attrs

    def to_internal_value(self, data):
        result = super().to_internal_value(data)
        iid = data.get('interface').get('iid')
        result['interface'] = Interfaces.objects.get(id=iid)
        return result

    # def create(self, validated_data):
    #     pass


# class TestcaseRunSerializer(serializers.ModelSerializer):
#     env_id = serializers.IntegerField(label="所屬環(huán)境id", help_text="所屬環(huán)境id",
#                                       validators=[ManualValidateIsExist('env')])
#
#     class Meta:
#         model = Testcases
#         fields = ('id', 'env_id')

class TestcaseRunSerializer(RunSerializer):

    class Meta(RunSerializer.Meta):
        model = Testcases

四、視圖?

import json
import os
from datetime import datetime

from django.conf import settings
from django.http import JsonResponse
from rest_framework import viewsets
from rest_framework import permissions
from rest_framework.response import Response
from rest_framework.decorators import action

from .models import Testcases
from envs.models import Envs
from . import serializers
from utils import handle_datas, common
from utils.mixins import RunMixin


class TestcasesViewSet(RunMixin, viewsets.ModelViewSet):

    queryset = Testcases.objects.all()
    serializer_class = serializers.TestcaseModelSerializer
    permission_classes = [permissions.IsAuthenticated]

    # 刪除
    def destroy(self, request, *args, **kwargs):
        response = super().destroy(request, *args, **kwargs)
        response.status_code = 200
        response = {"code":2000,"msg":"刪除成功"}
        response =JsonResponse(response)
        return response

    # 獲取單個詳情
    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object() # type: Testcases
        try:
            testcase_include = json.loads(instance.include, encoding='utf-8')
        except Exception:
            testcase_include = dict()

        try:
            testcase_request = json.loads(instance.request, encoding='utf-8')
        except Exception:
            return Response({'msg': '用例格式有誤', 'status': 400}, status=400)

        testcase_request_data = testcase_request.get('test').get('request')
        # 獲取json參數(shù)
        json_data = testcase_request_data.get('json')
        json_data_str = json.dumps(json_data, ensure_ascii=False)

        # 獲取extract參數(shù)
        extract_data = testcase_request.get('test').get('extract')
        extract_data = handle_datas.handle_data3(extract_data)

        # 獲取validate參數(shù)
        validate_data = testcase_request.get('test').get('validate')
        validate_data = handle_datas.handle_data1(validate_data)

        # 獲取variables參數(shù)
        variables_data = testcase_request.get('test').get('variables')
        variables_data = handle_datas.handle_data2(variables_data)

        # 獲取parameters參數(shù)
        parameters_data = testcase_request.get('test').get('parameters')
        parameters_data = handle_datas.handle_data3(parameters_data)

        # 獲取setup_hooks參數(shù)
        setup_hooks_data = testcase_request.get('test').get('setup_hooks')
        setup_hooks_data = handle_datas.handle_data5(setup_hooks_data)

        # 獲取teardown_hooks參數(shù)
        teardown_hooks_data = testcase_request.get('test').get('teardown_hooks')
        teardown_hooks_data = handle_datas.handle_data5(teardown_hooks_data)

        data = {
            "author": instance.author,
            "testcase_name": instance.name,
            "selected_configure_id": testcase_include.get('config'),
            "selected_interface_id": instance.interface_id,
            "selected_project_id": instance.interface.project_id,
            "selected_testcase_id": testcase_include.get('testcases', []),
            "method": testcase_request_data.get('method'),
            "url": testcase_request_data.get('url'),
            "param": handle_datas.handle_data4(testcase_request_data.get('params')),
            "header": handle_datas.handle_data4(testcase_request_data.get('headers')),
            "variable": handle_datas.handle_data2(testcase_request_data.get('data')),
            "jsonVariable": json_data_str,
            "extract": extract_data,
            "validate": validate_data,
            # 用例的當(dāng)前配置(variables)
            "globalVar": variables_data,
            "parameterized": parameters_data,
            "setupHooks": setup_hooks_data,
            "teardownHooks":teardown_hooks_data
        }

        return Response(data, status=200)

    # @action(methods=['post'], detail=True)
    # def run(self, request, *args, **kwargs):
    #     # 1、取出用例模型對象并獲取env_id
    #     # instance = self.get_object()    # type: Testcases
    #     # serializer = self.get_serializer(data=request.data)
    #     # serializer.is_valid(raise_exception=True)
    #     # env_id = serializer.validated_data.get('env_id')
    #     # env = Envs.objects.get(id=env_id)
    #
    #     # 2、創(chuàng)建以時間戳命名的目錄
    #     # dirname = datetime.strftime(datetime.now(), "%Y%m%d%H%M%S")
    #     # testcase_dir_path = os.path.join(settings.PROJECT_DIR, datetime.strftime(datetime.now(), "%Y%m%d%H%M%S"))
    #     # os.makedirs(testcase_dir_path)
    #
    #     # 3、創(chuàng)建以項目名命名的目錄
    #     # 4、生成debugtalks.py、yaml用例文件
    #     # common.generate_testcase_file(instance, env, testcase_dir_path)
    #
    #     # 5、運(yùn)行用例并生成測試報告
    #     # return common.run_testcase(instance, testcase_dir_path)
    #     qs = [self.get_object()]
    #     return self.execute(qs)

    def get_serializer_class(self):
        if self.action == "run":
            return serializers.TestcaseRunSerializer
        else:
            return super().get_serializer_class()

    def get_testcase_qs(self):
        return [self.get_object()]
        # return self.queryset.filter(id=self.get_object().id)

?

這段代碼是一個Django視圖集,用于處理測試用例的增刪改查操作。它繼承了RunMixin類,并且使用了ModelViewSet視圖集來簡化代碼。

該視圖集定義了以下幾個方法:

  1. destroy: 重寫了父類的destroy方法,刪除指定的測試用例,并返回一個刪除成功的響應(yīng)。
  2. retrieve: 重寫了父類的retrieve方法,獲取單個測試用例的詳情,并將相關(guān)數(shù)據(jù)進(jìn)行處理后返回。
  3. get_serializer_class: 根據(jù)請求的動作不同,選擇不同的序列化器進(jìn)行序列化。
  4. get_testcase_qs: 獲取測試用例的查詢集。

除此之外,還有一段被注釋掉的代碼,它包含了運(yùn)行測試用例的邏輯,根據(jù)時間戳創(chuàng)建目錄、生成測試用例文件,并運(yùn)行測試用例生成測試報告。

需要注意的是,這段代碼中使用了一些自定義的工具類和函數(shù),如handle_datas、common等,未提供相關(guān)代碼,可能需要根據(jù)實際情況自行補(bǔ)充。文章來源地址http://www.zghlxwxcb.cn/news/detail-585051.html

到了這里,關(guān)于Django實現(xiàn)接口自動化平臺(十四)測試用例模塊Testcases序列化器及視圖【持續(xù)更新中】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Django實現(xiàn)接口自動化平臺(十三)接口模塊Interfaces序列化器及視圖【持續(xù)更新中】

    Django實現(xiàn)接口自動化平臺(十三)接口模塊Interfaces序列化器及視圖【持續(xù)更新中】

    相關(guān)文章: Django實現(xiàn)接口自動化平臺(十二)自定義函數(shù)模塊DebugTalks 序列化器及視圖【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客 本章是項目的一個分解,查看本章內(nèi)容時,要結(jié)合整體項目代碼來看: python django vue httprunner 實現(xiàn)接口自動化平臺(最終版)_python+vue自動化測

    2024年02月17日
    瀏覽(15)
  • Django+vue自動化測試平臺(7)-- 使用Selenium+vue實現(xiàn)WebUI自動化及結(jié)果展示

    Django+vue自動化測試平臺(7)-- 使用Selenium+vue實現(xiàn)WebUI自動化及結(jié)果展示

    Selenium是一個用于Web應(yīng)用程序測試的工具。Selenium測試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試應(yīng)用程序看是否能夠很好得

    2024年02月14日
    瀏覽(27)
  • Django實現(xiàn)接口自動化平臺(九)環(huán)境envs序列化器及視圖【持續(xù)更新中】

    Django實現(xiàn)接口自動化平臺(九)環(huán)境envs序列化器及視圖【持續(xù)更新中】

    相關(guān)文章: Django實現(xiàn)接口自動化平臺(八)測試報告reports序列化器及視圖【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客 本章是項目的一個分解,查看本章內(nèi)容時,要結(jié)合整體項目代碼來看: python django vue httprunner 實現(xiàn)接口自動化平臺(最終版)_python+vue自動化測試平臺_做測

    2024年02月16日
    瀏覽(22)
  • Django實現(xiàn)接口自動化平臺(十一)項目模塊Projects序列化器及視圖【持續(xù)更新中】

    Django實現(xiàn)接口自動化平臺(十一)項目模塊Projects序列化器及視圖【持續(xù)更新中】

    相關(guān)文章: Django實現(xiàn)接口自動化平臺(十)自定義action names【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客 本章是項目的一個分解,查看本章內(nèi)容時,要結(jié)合整體項目代碼來看: python django vue httprunner 實現(xiàn)接口自動化平臺(最終版)_python+vue自動化測試平臺_做測試的喵醬的博

    2024年02月16日
    瀏覽(46)
  • Django實現(xiàn)接口自動化平臺(十二)自定義函數(shù)模塊DebugTalks 序列化器及視圖【持續(xù)更新中】

    Django實現(xiàn)接口自動化平臺(十二)自定義函數(shù)模塊DebugTalks 序列化器及視圖【持續(xù)更新中】

    上一章: Django實現(xiàn)接口自動化平臺(十一)項目模塊Projects序列化器及視圖【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客 本章是項目的一個分解,查看本章內(nèi)容時,要結(jié)合整體項目代碼來看: python django vue httprunner 實現(xiàn)接口自動化平臺(最終版)_python+vue自動化測試平臺_做測

    2024年02月16日
    瀏覽(22)
  • 搭建Django+pyhon+vue自動化測試平臺

    搭建Django+pyhon+vue自動化測試平臺

    Django安裝 使用管理員身份運(yùn)行pycharm使用local ???檢查django是否安裝成功 ? ? 創(chuàng)建項目 cd 切換至創(chuàng)建的項目中啟動django項目 啟動項目 點(diǎn)擊連接跳轉(zhuǎn)至瀏覽器 ?更改django為中文settings文件---LANGUAGE_CODE Vue安裝 安裝cnpm,代替npm指令,速度快 ? ? ? ?安裝vue腳手架 ? ? ? ? 切換至

    2024年02月14日
    瀏覽(18)
  • 接口自動化測試平臺

    接口自動化測試平臺

    下載了大神的EasyTest項目demo修改了下https://testerhome.com/topics/12648 原地址。也有看另一位大神的HttpRunnerManagerhttps://github.com/HttpRunner/HttpRunnerManager 原地址,由于水平有限,感覺有點(diǎn)復(fù)雜~~~ 【整整200集】超超超詳細(xì)的Python接口自動化測試進(jìn)階教程,真實模擬企業(yè)項目實戰(zhàn)!! ?

    2024年02月15日
    瀏覽(29)
  • 接口自動化測試系列-接入測試平臺

    接口自動化測試系列-接入測試平臺

    測試平臺目錄 測試平臺自建源碼 后臺核心代碼 部分前端代碼樣例

    2024年02月10日
    瀏覽(27)
  • 接口測試 react+unittest+flask 接口自動化測試平臺

    目錄 1 前言 2 框架 2-1 框架簡介 2-2 框架介紹 2-3 框架結(jié)構(gòu) 3 平臺 3-1 平臺組件圖

    2024年02月16日
    瀏覽(18)
  • 接口測試之Jmeter+Ant+Jenkins接口自動化測試平臺

    接口測試之Jmeter+Ant+Jenkins接口自動化測試平臺

    一個完整的接口自動化測試平臺需要支持接口的自動執(zhí)行,自動生成測試報告,以及持續(xù)集成。 Jmeter 支持接口的測試, Ant 支持自動構(gòu)建,而 Jenkins 支持持續(xù)集成,所以三者組合在一起可以構(gòu)成一個功能完善的接口自動化測試平臺。 環(huán)境依賴 JDK環(huán)境配置 Jmeter安裝 Ant安裝環(huán)

    2024年02月13日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包