パフォーマンステストのポストの添付ファイル

51CTO LoadRunnerのパフォーマンステストからの転送 - アップロードファイルスクリプト

詳細LRアップロードスクリプト

脚本
char *fr(char *filename){

    longupfile ;    //定义文件句柄

    intcount ;      //定于文件长度

    intnFileLen;    //定义文件长度

    char*buffer;

    upfile= fopen(filename,"rb"); //以只读方式打开二进制文件,将upfile指向该文件



   fseek(upfile,0,2);          //将文件指针移动到文件尾

    nFileLen= ftell(upfile);      //获得文件尾到文件头的偏移字节数,即文件所包含字节数

    fseek(upfile,0,0);          // 将文件指针移动到文件头

    lr_output_message("nFileLen:%d",nFileLen);    //打印文件字节数



    buffer= (char*)malloc(nFileLen);    //分配长度为nfilelen的内存块

    count= fread(buffer, sizeof(char),nFileLen, upfile); //将upfile指向的文件所包含字节数的所有数据项读入到buffer中,并返回数据项的字节数,及文件长度



    lr_output_message("count:%d",count);  //打印读入文件的字节数

    lr_save_int(count,"fbuff");  //将文件长度赋值给fbuff

    lr_save_int(count-1,"fcurr");  //将文件长度-1赋值给fcurr

    returnbuffer;  //返回读取的文件

}

vuser_init()

{

    lr_save_string(fr("E:\\FS\\testfile\\55.txt"),"fdata");//将读取的文件存到fdata变量中

    return0;

}





Action()

{

/*上传文件*/

    lr_think_time(3);

    lr_start_transaction("hdupfile");



    web_add_header("Content-Disposition","attachment;filename=\"testdata.rar\"");

    web_add_header("X-Content-Range","bytes0-{fcurr}/{fbuff}");

    web_add_header("Session-ID","{userid}");

    web_add_header("Content-Type",  "application/octet-stream");



    web_custom_request("hdup",

    "URL=http://10.255.0.149/upload?userId={userid}&bigmd5={userid}&taskId={userid}&offset=0",

        "Method=POST",

        "Resource=0",

        "Referer=",

        "Mode=HTML",

        "Body={fdata}",

        LAST);

    lr_end_transaction("hdupfile",LR_AUTO);

return 0;

}



vuser_end()

{

    return0;

}

 

知識ポイント:

C言語では、読み取りと書き込みのファイルへ

  1. 1.Fopen:

役割:最初のパラメータは、ファイルが現在存在しない場合、システムはファイル名を作成し、ファイルへのポインタです。2番目のパラメータには、このファイルの操作です。例えば、読み取り専用、読み書き、書き込みなどを。

fopenのプロトタイプ:

ポインタファイル名=のfopen(ファイル名、使用済みの論文)

どこで:

ファイルポインタ名:それはポインタ変数ファイルの種類として指定する必要があります

ファイル名:ファイルの名前は、文字列定数または文字列の配列をオープンします

ペーパーを使用します。それは、ファイルの操作の種類とモードを指し、

例:現在のファイルのオープン、ファイルAのディレクトリに、読み取り専用の操作を実行すると、ファイルへのFPと点
FILE * FP、
FP =(「ファイルA」、「R&LT」)。

 

以下のシンボルとその重要性によって与えられた12のうち用紙の使用。
「RT」:読み取り専用のデータのみを読み込むことができ、テキストファイルを開く
だけで、書き込みデータを許可、書き込みが唯一のオープンまたはテキストファイルを作成:「重量」を
ファイルの末尾にテキストファイルと書き込みデータを開くに追加:「で」
「RB :「読み取り専用読み取り専用データできるように、バイナリファイルを開く
」:書き込みが唯一のオープンまたはバイナリファイルを作成し、唯一のライトデータ許可WB「を
」AB「:ファイルの末尾にバイナリファイルと書き込みデータを開くに追加
」RT +「:テキストファイルを読み込み開き、書き込み、読み込み、書き込みを許可するように
、「重量+を」:書き込みやテキストファイルを作成して開かれ、読者を許可するように
、テキストファイルの読み取りと書き込みを開く読んでできるようにするか、データファイルの末尾に追加:「+で」
「RB +」 :オープンリーディングと読み書きができますバイナリファイルの書き込み
「WB +」を:書き込みまたはバイナリファイルのオープンを作成し、読み書きできるように
、「AB +」:オープンリーディングとファイルの最後に読んだことができますバイナリファイル、または追加のデータを書き込みます

 

バイナリコードにASCIIコードに、メモリにテキストファイルを読み取るには、そのファイルをテキストとしてディスクに書き込まれたときに、私たちもそうより過ごすために読み取りと書き込みのテキストファイル、ASCII、バイナリコードに変換する必要があります変換時間。読むと、このような変換が存在しないバイナリファイルを書き込みます。

 

  1. 2.Fseek機能

役割:バイナリモードで開いているファイルに対して、ファイルが開かれ、通常の後、読み書きするファイルポインタの位置を移動し、年代順に位置を読み取りおよび書き込みが、時にはあなたは読み書きの位置を変更するには、例えば、再びそれを読んで、どこから再び始まります。

 

FSEEK関数プロトタイプ:int型のfseek(FILE *ストリーム、長いオフセット、int型の起源)

最初のパラメータは、ストリームファイルポインタである
オフセットの正の整数を表す第2のオフセットパラメータがオフセットされ、負の数は負のオフセットを示している
ファイルの先頭オフセット値を原点から第3のパラメータのセットです。 SEEK_CUR、SEEK_END又はSEEK_SET
SEEK_SET:ファイルの開始
SEEK_CUR:現在位置
SEEK_END:ファイルの終わり
請求SEEK_SET、SEEK_CUR SEEK_END 0、1、2ターンに
簡単に説明すると:
のfseek(FP、100L、0);のFPポインタファイルの先頭から100のバイト;
fseek関数(FP、100L ,. 1)、現在の位置から100バイトのファイルへのポインタFP;
fseek関数(FP、100L、2);ファイルの終わりから100ワードにFPポインタバックフェスティバルで。

 

  1. 3.Ftell機能

FTELL関数プロトタイプ:ftellはlong int型(FILE *ストリーム);

処置:バイト数が最初の文書に対してオフセットファイルポインタ位置の現在位置を求めます。前と後のプログラムの頻繁な動きにランダムなファイル、ファイルの場所を取った場合、ファイルの現在位置を決定することは容易ではありません。ftellは関数を呼び出すと、簡単にファイルの場所を決定することができます

:ftellは機能を使用すると、簡単になど、ファイルの長さを知ることができます

Fsekk(FP、0,2)//ファイルの末尾にファイルポインタfpを移動

LEN = ftellは(FP)//バイト数は、ファイルの第1の端部からのファイルへのオフセットを取得するには、バイトの数は、ファイルに含まれているバイトの数に等しいです

 

 

 

  1. 4.Malloc機能

関数プロトタイプます。extern void *型のmalloc(unsignedInt型num_bytesバイト)。

malloc関数の構文は次のとおりです。名=ポインタ(データタイプ*)のmalloc(長さ)

 

処置:num_bytesバイトのメモリアロケーション長のブロックは、バイト:割り当てが割り当てられたメモリへの成功したポインタがあれば、そうでない場合は、返された戻りヌルNULLれます。メモリが使用されなくなった場合には、メモリブロックを解放し自由()関数を使用しないでください。 

 

  1. 5.fread機能とfwriteの機能

機能:データブロックを読み書きするために使用します。

プロトタイプ:

FREAD(バッファ、サイズ、数、FP)

FWRITE(バッファ、サイズ、数、FP)

説明:

(1)バッファは:関数freadへのポインタであり、これは、データ格納アドレスに読み込まれます。fwriteのために、アドレスデータが出力されます。

読み取るバイト数と書き込み;:(2)サイズ

(3)カウント:サイズへのリードとライトの数は、データのバイト。

(4)FP:ポインタファイルタイプ。

 

LR機能

  1. 1.lr_save_int(intvalue、CONSTのchar * PARAM_NAME)

文字列型の整数に変換し、値がパラメータの文字列に格納されます。

  1. 2.lr_save_string(CONSTチャー* param_valueに、CONSTチャー* PARAM_NAME)

機能:パラメータに割り当てられ、指定した文字列のヌル終了

 

  1. 3.web_add_header(constchar *ヘッド、constのchar型*コンテンツ)

機能:次のWeb要求に対する、指定されたリクエストヘッダ

 

  1. 4.web_custom_request(constchar * RequestName、[EXTRARES、] LAST)。

戻り値:
失敗の成功、LR_FAIL(1)の代わりに戻りLR_PASS(0)。

機能:この方法は、カスタムを作成するために、任意のHTTPリクエストとリクエストボディを可能にします。ユーザー要求のVuGenがない他の機能を説明デフォルトでは、この関数が生成されます。

すべてのWeb仮想ユーザは、WAPVusersはHTTPモードまたはワイヤレスセッションプロトコル(WSP)再生モードで実行web_custom_request機能をサポートしています。

 

パラメータ:

RequestName ステップの名前、ツリービューのVuGenに表示される名前。

 

属性リストのサポートされている属性は以下のとおりであります:

  • URL:ページアドレス。

  • 方法:提出、POSTまたはGETのページ。

  • 先はTargetFrame:現在のフレームリンクやリソースの名前が含まれています。

  • ENCTYPE:タイプをコードします。例えば、テキスト/ HTML、予め要求の値は、コンテンツタイプとして指定されます。事前にニュースのコンテンツ-tpyeを指定しますが、コンテンツtpyeは、サーバー側のエラー原因体と一致しない場合。取得したのenctype記録を変更しないことをお勧めします。

任意「ENCTYPE」の[AUTO_】ヘッダ機能は、コンテンツタイプを指定したカバレッジweb_add_を指定します。"ENCTYPE =を"(NULL値)、NO "のContent-Type" ヘッダリクエストを指定する場合。「ENCTYPE」を省略した場合、任意web_add_ [AUTO_】ヘッダ機能が動作します。もしどちらもENCTYPE web_add_ [AUTO_】ヘッダ機能、および "METHOD = POST"、 "アプリケーション/ x-www-form-urlencodedでは、" デフォルト値として使用されます。他の場合には、要求なしのContent-Typeヘッダ。

記録オプションは、ときにのみ - 現在のスクリプトステップオプションが選択されたときに録音script-- --htmlベースRecordwithin、リソース属性の一覧は、コードに挿入されます。

  • RecContentType:スクリプトの記録レスポンスのContent-Typeヘッダ。例えば、テキスト/ HTML、アプリケーション/ X-ジャバスクリプトなど。Resource属性が設定されていない場合、ターゲットURLがリソースを記録しているかどうかを判断するためにそれを使用。このプロパティは、プライマリとセカンダリのリソースが含まれています。最も頻繁に使用されるタイプは、テキスト、アプリケーション、画像です。多くのリソースの小さな変化の種類に応じて。例: "RecContentType = text / htmlの":HTMLテキストを示します。"RecContentType =アプリケーション/ mswordは":現在の使用はMSWordのであることを示します。

  • リファラー:現在のページに関連するページ。あなたが明示的にURLアドレスを指定している場合は、これを省略することができます。

  • ボディ:リクエストボディ。

本体:表現のルール、印刷可能な文字列。これは、NULLバイトを表現することはできません。すべての文字はバックスラッシュで表されます。注:古いスクリプトでは、印刷不可能な文字は16進形式でリクエストボディでエンコードされて見ることができます。(例えば、「\\ x5c」)、この場合には、あなたは「バイナリ= 1」が識別されて使用する必要があります。「使用してバイトのNull ://0.0.0.0/ファイルを表すために」。代わりに、新しいスクリプトへの要求が異なる身体パラメータの中に配置されます(「ボディ= ...」、「 BodyBinary = ...」、ボディ= ...「)。

BodyBinary:バイナリコードを表します。リクエストボディの中に16進数でプリント不可能文字のファイル:// xhh /エンコードされました。HHは、16進値です。「使用してバイトのNull ://0.0.0.0/ファイルを表すために」。

BodyUnicode:アメリカ英語、特にラテンUTF-16LE(リトルエンディアン)エンコーディング。このエンコーディング0バイトは、文字が読みやすくなるように、各文字の末尾に追加されます。しかし、VuGenによって実際のパラメータのすべてのゼロバイトが除去されます。しかし、Webサーバーに送信される前に、web_custom_request関数は0バイトを再び追加されます。非印字可能文字の場合は、単一のバックスラッシュを使用して、彼らはNULLバイトを表現することができなかったと述べました。

注:リクエストボディが100Kよりも大きい場合は、代わりにボディパラメータ変数を使用します。変数はlrw_custom_body.h内で定義されています。

  • RAW BODY :(機能は、現在利用可能であるのみweb_custom_request):リクエストボディがポインタ、このデータ列へのポインタとして渡されます。バイナリ要求がBodyBinary体の属性を使用して送信することができる(または渡されるボディを使用して属性、前提条件は、セット「バイナリ= 1」にあります)。いずれにせよ、この方法では、ASCII文字にバックスラッシュエスケープ文字印刷できない文字を使用する必要があります。生データを表示するために、より便利な方法を持っているために、生のBodyプロパティがされて入ってきた、バイナリデータを指すポインタを渡すことができます。

  • BodyFilePath:送信された要求のボディとしてファイル・パス。これは、次の属性を使用することはできません:ボディ、または他の特性や生ボディBodyプロパティはBodyBinary、BodyUnicode、RAW_BODY_STARTまたはバイナリ= 1を備えます。

  • リソース:URLがリソースかどうかを示します。これは、1であり、0ではありません。このパラメータを設定した後、RecContentTypeパラメータは無視されます。「リソース= 1」は、現在の操作手段成功し、スクリプトまたはではないが、持っているところはほとんどやっていること。リソースのダウンロード中にエラーが発生した場合は、警告ではなくエラーとして扱われ、URLがによってダウンロードされているかどうか - このオプションは、「ランタイムの設定-BrowserEmulationダウンロード非HTMLリソース」の影響。この操作の応答情報は、HTMLを解析するようではありません。「リソース= 0」は、このURLが送信要求(RTS)の影響を受けていない、重要であることを示し、必要なときに、それを解析します。

 

  • ResourceByteLimit:HTTPで使用できないモード、(地区仮想ユーザ・スクリプトは、この地域のすべての機能を同時に)同時Groups領域では使用できません。ソケットはWinInetのが適用されない、再生のみに適用されます。

 

  • スナップショット:スナップショットファイル名、使用関連付け。

 

  • モード:HTML、HTTPのレベルを記録する2種類。

HTMLレベル:現在のWebインターフェイス上の直感的なHTMLのアクションを記録します。ステップweb_urlバイステップでは、web_link、web_image、web_submit_formこれらのアクションを記録します。VuGenによってのみ要求されたHTMLページは、スクリプトやアプリケーションが処理されません返し記録しました。

HTTPレベル:web_url命令にすべての要求を記録VuGenがweb_link、web_image、web_submit_formこれらの関数を生成されません。この方法は、より柔軟であるが、結果のスクリプトは直感的ではありません。

 

  • ExtraResBaseDir :(現在入手可能な唯一のweb_custom_request機能):根のURLは、EXTRARESグループを置きます。これは、相対URLを解決するために使用される(翻訳を追加しました:Windowsのための相対パスと絶対パスと同様に)。

URLは、(例えば、絶対パスを指定できhttp://weather.abc.com/weather/forecast.jsp?locCode=LFPO)、それはまた、相対パス(例えば、「forecast.jsp?LocCode = LFPO」)ことができます 。

あなたはルートURLパスを解決するために、相対URLパスを使用する必要がありますので、実際のダウンロードURLは、絶対パスで行われます。例えば、使用してhttp://weather.abc.com/weather/を解決するためのルートパス「?forecast.jsp locCode = LFPO」として、最終URLは次のとおりです。http://weather.abc.com/weather/forecast。 JSP?locCode = LFPOノー「ExtraResBaseDir」場合は、デフォルトのルートURLは、メインページのURLです。

 

  • ユーザーエージェント:ユーザー・エージェント、それはアプリケーション、通常のWebブラウザを識別する名前HTTPヘッダである、それはインタラクティブなユーザとサーバを提供します。

例えば:ヘッダ "ユーザーエージェント:のMozilla / 4.0(互換; MSIE 6.0; WindowsNTの5.0)" IEブラウザウィンドウNT 6.0で識別されます。他のUser-Agentの値が他のブラウザ、または、ブラウザ以外のプログラムを記述するために使用されます。実行時パラメータによって記録として一般的に、アプリケーションの要求はすべて(ランタイム設定ブラウザエミュレーション-のUserAgent)を指定するには、同じユーザーエージェントを使用しています。いずれにしても、簡単なブラウザプロセスでは、それはまだ相互作用を直接サーバと、彼らは、ブラウザのユーザーエージェントのプロパティから、通常は異なっている(ActiveXコントロールなど)、ブラウザ以外の部品に使用することができます。指定された「ユーザーエージェントは、」これは、ブラウザ以外の要求であることを示しています。文字列がHTTPヘッダー「のUser-Agent:」指定された使用、いくつかのケースでは、それはまた、スクリプトの再生の動作に影響します。たとえば、リソースが指定されたURLに属していると仮定して、というように、ブラウザのキャッシュを使用しないでください。

LoadRunnerは、それ自体は、それ自体が同じブラウザを使用して、指定した文字列の値をチェックしません。

  • バイナリ:「= 1バイナリ」各身体にページ要求を表すファイル:// X /フォームの値が##(ここで、「##」2桁の16進数を表す)、それは単一で置換されていますバイトの16進値です。

「バイナリ= 0」(デフォルト)場合は、すべての文字列は、文字通り値の転送に応じました。

ダブルスラッシュの使用に注意してください。Cコンパイラでシングル、ダブルスラッシュスラッシュとして解釈されます。ないゼロバイトの場合、1つのスラッシュバイナリ(例えば、X20の上で使用して\の代わりに用いた場合には等しくなくてもよい:// X20に/ファイル)。あなたがゼロバイトが必要な場合は、あなただけ使用することができます// X00 /:ファイルとセット「バイナリ= 1」、\ X00は論理的に切り捨てられますが

 

  • ContentEncoding:指定リクエストボディ(GZIPまたはDEFLATE)で指定された使用(例えば、圧縮)エンコードされ、「ContentEncoding:」対応するHTTPヘッダと要求が一緒に送信されます。このパラメータは、web_custom_requestとweb_submit_dataに適用されます。

  • EXTRARES:以下のパラメータは、リソース属性のリストで表示されます。

  • LAST:最後の識別子。

リソースリストの属性
WebページのメカニズムはJavascriptが、ActiveXは、JavaがandFlashが要求されたアプレットリソースを含む非HTMLリソースリストを生成します。VuGenの記録オプションでは、あなたは現在の操作に記録されているこれらのリソースを設定する(これはデフォルトの設定です)、またはレコードに別のステップとしてすることができます

公開された30元の記事 ウォン称賛21 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_44078196/article/details/104795356