I.はじめに
自動テストでは、いくつかの問題が発生することがよくあります。
(1)何百ものテストケースがありますが、ログインステータスはどのように維持されますか?
(2)テストされた各インターフェースは、他のインターフェースのパラメーターに依存します。次の図に示すように、12を超えるフロントインターフェースクラスがあります。さらに、datetime、json、requests、osなどの一般的に使用されるライブラリがいくつかあります。など。テストケースクラスごとに、XXXから1ダース以上のインポートXXXを書き込む必要がありますか?
では、インターフェイスのインポートの記述を単純化して、すべての依存関係とライブラリを一度にインポートするにはどうすればよいでしょうか。
次に、問題を解決します
1.以下に示すように、トークン共有の問題を解決する効果
/ api / auth / jwt / tokenはログインインターフェースであり、一度ログインするだけで、すべてのインターフェーステストケースが実行されます
2.インポートを簡素化します
記事[パイソン+ unittestのインターフェース自動テスト(5)] -デザインのテストケース、 1つのステップは、フロントインターフェースをインポートすることです。
次の図に示すように、PreProcessing import *からのみ、前の記事の12を超えるプレインターフェイスを一度にインポートできます。
三、実現
次に、Pythonパッケージのいくつかの機能を使用して、トークンの共有を実現し、インターフェイスのインポートを簡素化します。
まず、Pythonパッケージの機能を理解する必要があります
(1)__ init__。pyをインポートする際に、実行可能なコードがある場合、そのコードは実行されます
(2)インポートは1回だけインポートされます。つまり、インポートされた回数に関係なく、実際には1回だけ実行されます。
したがって、前処理パッケージなどの前処理メソッドのパッケージを作成し、パッケージで使用する必要のあるすべてのメソッドをカプセル化してから、__init__。pyでカプセル化するだけで済みます。
1.インポートする必要のあるすべてのメソッドをインポートします
#コーディング= UTF-8 __all__ = [ 'コアベースコア'、 'コアコア'、 'コア部門'、 'コア' 'コアユーザー'、 'LisApplication'、 'RtidLisSetProjectMapping'、 'RtipLisAntibiotic'、 'RtipLisMidClinicalApply'、 ' RtipLisOut ' ' RtipLisQueuingWindows '、 ' RtipLisReport '、 ' RtipLisReportCheckCondition '、 ' RtipLisReportProject '、 ' RtipLisReportUnit '、 ' RtipLisUnitProjectMapping ' ]
インポートリクエスト importunittest import json from random import choice import datetime import random import string import pymysql import os import time
2.ログイン方法を実現してトークンを取得します
admin_params = {'ユーザー名': '***'、 'パスワード': '***'} base_url = 'http:// ***'
デフget_token(のparams): "" " 登录 """ LOGIN_URL = BASE_URL + '/ API /認証/ JWT /トークン' login_headers = { # 'のContent-Length': '39'、 'ユーザーエージェント':「のMozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 74.0.3729.157 Safari / 537.36 '、 ' Content-Type ':' application / json; charset = UTF-8 '、 ' Accept ' : '* / *'、 'Accept-Encoding': 'gzip、deflate'、 'Accept-Language': 'zh-CN、zh; q = 0.9' } try: r = requests.post(url = login_url、json = params、headers = login_headers) response = json.loads(r.text) req_token = response ['data'] ['token'] KeyErrorreq_token KeyErrorを除く: print( 'Get Token Failed') req_token = get_token(params)
3.さらに、いくつかの一般的なパラメータを定義することもできます
LEVEL = 'debug'#ログレベル PTYPE =(1、2)#タイプ SEX_CODE =(1、2、3、4)#性別 AGE_UNIT_CODE =( 'day'、 'month'、 'year')#年齢単位 USE_FLAG = (1、0)#フラグを有効にする PRINT_NOW =(0、1)#バーコードを印刷する BUSINESS_TYPE =(1、2、3、4、5、6、7 )#レポートアイテムビジネスタイプ1共通
最後に、すべてのテストクラスで、上記の__init__。pyで宣言されたコンテンツを使用できます。
#coding = utf-8 import sys sys.path.append( '..') import PreProcessing as p from PreProcessing import * class Accept(p.unittest.TestCase): @ classmethod def setUpClass(cls): cls.header、cls .org_id、cls.user_id = p.header、p.org_id、p.user_id print( 'header:'、cls.header) cls.url_test = p.base_url + '/ api / rtip / lis / application / accept' def setUp(self): t = LisApplication.LisApplication(p.base_url、self .__ class __。org_id、self .__ class __。header) self.app_detail = t.get_app_detail( '1') print( 'app_detail'、self.app_detail) self .app_detail ['applicationStatus'] = '2 '#申請ステータスを2承認済みに更新します c = CoreBaseCore.CoreBaseCore(p.base_url、self .__ class __。org_id、self .__ class __。header) self.doctor_id = c.get_core_technician() print( 'doctor_id'、self.doctor_id) def test_accept_sample_001(self): pass def tearDown (self): pass @classmethod def tearDownClass(cls): pass if __name__ == ' __ main __ ':p.unittest.main()