文章出處

  這個情人節的消遣,通用模塊,滿足之前遇到的場景,把未完成幾個代碼片段整理,做了終結,又補充些東西,一直覺得很幸運地選擇了編程這個行業,它讓人可以根據自己內心的想法,像童年的孩子玩積木一樣自娛自樂,享受著一份喜悅。

 

test-service

https://pypi.python.org/pypi/test-service/

test-service is a Python package that test web service base on linux curl.

 

簡介:

pycharm自帶個工具,在菜單Tools --> Test RESTful Web Service可以打開,可視化界面的操作,但不利于參數輸入后保存以及后續的復用。

此工具基于以上缺點,直接借助linux工具,結合實際的個人需求與想法,以攔截請求、保存請求、復用的流程進行,為方便個人所用定制。

依賴:

$ sudo yum install curl
$ sudo apt-get install curl

使用:

模塊介紹:

curl_reader.py:
    - 讀取存放測試腳本的文件, 以命令行的形式執行(指定的行腳本, 指定范圍的行腳本).
    - 利用 linux curl 構建測試腳本, 減少服務端開發過程中, 在測試上對客戶端的依賴.

converge.py:
    - 從源碼文件中生成 消息碼/消息文本配置信息.

@kylin_debug_request:
    - 測試時, 實時輸出POST信息到控制臺.
    - 測試時, 實時輸出處理時間到控制臺.
    - 保存測試時每個view函數的執行時間, 用于后續性能分析及程序持續改進.

curl_builder.py:
    - 構建生成curl測試請求數據, 以便于后續回歸測試, 供curl_reader.py自動化.
    - 對之前生成報告文件做去重處理.

配置settings.py修改:

# test-service配置項
POST_DATA_PRINT = False  # 是否輸入POST數據
POST_DATA_SAVED = False  # 是否保存請求痕跡
EXEC_TIME_PRINT = False  # 是否輸出執行時間
SAVE_ROWS_QUEUE = 5     # 最大多少行數保存

LOGIN_API = ('/user/login/', '/user/join/',)  # 登陸
LOGOUT_API = ('/user/logout/',)  # 注銷

TIME_REPORT = os.path.join(BASE_DIR, 'report', 'report_time.md')  # 時間保存文件
CURL_REPORT = os.path.join(BASE_DIR, 'report', 'report_curl.md')  # 腳本保存文件
CONVERGE_LIST = [os.path.join(BASE_DIR, 'demo', 'views.py')]  # 要查找源文件路徑

django manage.py 命令項如下:

$ python manage.py converge
$ python manage.py distinctcurl

$ python manage.py executecurl
$ python manage.py executecurl 5
$ python manage.py executecurl 5 10

@kylin_debug_request 裝飾你的views.py函數.

curl參數:

GET 還是 POST 模式, 要看對面服務器的程序設定, curl 默認 GET 模式.

-G GET方式傳送數據 -d POST方式傳送數據

-D cookie.txt 寫 cookie 存儲 cookie 信息從 response 到文件 -b cookie.txt 讀 cookie 追加 cookie 信息到 request 請求中

-B, --use-ascii
  Use ASCII/text transfer
-S, --show-error
  Show error. With -s, make curl show errors when they occur
-s, --silent Silent mode. Don't output anything

-x 訪問所使proxy服務器及其端口

-o 下載文件, 指定文件名 -O 按照服務器上的文件名, 自動存在本地

-A 宣稱訪問所使用的自己的瀏覽器信息 -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

-e 宣稱 referer 地址, 服務器端常用的限制方法, 就是檢查 http 訪問的 referer, 比如先訪問首頁, 再訪問指定的 下載頁, 下載頁的 referer 地址就是首頁地址, 服務器端只要發現對下載頁某次訪問的 referer 地址不是首頁地址, 就 可以斷定是盜連, 這樣就可以騙對方的服務器.

FTP 上傳文件: curl -T local_file -u name:passwd ftp://url:port/path/

HTTP PUT method 上傳文件: curl -T local_file http://url:port/path

POST 模式下的文件上的文件上傳:

<form method="POST" enctype="multipar/form-data" action="http://url:port/path">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>

這樣的HTTP表單,用curl進行模擬: curl -F upload=@local_file -F nick=go http://http://url:port/path

會話狀態的方式:

# 一種方式是如上使用 curl -b 來存儲附加.

# 一種方式是自定義裝飾器即時自動登陸, 基于 django/contrib/auth/decorators.py 原文件的改動.

Add the following items in settings.py:

AUTO_LOGIN_USER = 'kylin'
AUTO_LOGIN_PASSWORD = '123456'

create yours decorators code file.

$ cp [your_paths]/django/contrib/auth/decorators.py [your_project_path]/decorators.py.
$ vim [your_project_path]/decorators.py

find function user_passes_test -> decorator -> _wrapped_view in decorators.py file.

add code:

auto_login_user = getattr(settings, "AUTO_LOGIN_USER", None)
auto_login_password = getattr(settings, "AUTO_LOGIN_PASSWORD", None)

if auto_login_user is not None and auto_login_password is not None:
    user = authenticate(username=auto_login_user, password=auto_login_password)
    login(request, user)
    return view_func(request, *args, **kwargs)

then usage:

try:
    from yours.decorators import login_required, permission_required
except:
    from django.contrib.auth.decorators import login_required, permission_required

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()