Rendimiento de los archivos adjuntos de correos de pruebas

Transferencia de las pruebas de rendimiento 51CTO LoadRunner - escritura de archivo de subida

script de carga LR detallada

脚本
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;

}

 

puntos de conocimiento:

Lenguaje C para leer y escribir archivos

  1. 1.Fopen:

Papel: El primer parámetro es un puntero a un archivo, si no existe actualmente en el archivo, el sistema crea el nombre del archivo. El segundo parámetro es el funcionamiento de este archivo. Por ejemplo, de sólo lectura, escritura y así sucesivamente lectura y escritura.

Fopen Prototipo:

nombre de archivo puntero = fopen (nombre de archivo, papeles usados)

donde:

Nombre de archivo del puntero: debe ser especificado como el tipo de la variable puntero del archivo

Nombre de archivo: nombre del archivo que se abrirá, una constante de cadena o una matriz de cadenas

Utilice papeles: se refiere al tipo y modo de operación del archivo

Por ejemplo: en el directorio del archivo abierto un archivo actual, ejecutar operaciones de sólo lectura, cuando fp y apunta al archivo
FILE * fp;
fp = ( "Archivo A", "R ^");

 

El uso de papeles de 12 dada por los siguientes símbolos y su significado.
"RT": sólo lectura abrir un archivo de texto, permitiendo que los datos de sólo lectura
"peso": a escritura sólo abrir o crear un archivo de texto, permitiendo que sólo los datos de escritura
"a": anexados para abrir un archivo de texto y datos de escritura al final del archivo
"rb ": sólo lectura abrir un archivo binario, permitiendo que los datos de sólo lectura
" wb ": sólo escritura abrir o crear un archivo binario, permitiendo que sólo los datos de escritura
" AB ": anexados para abrir un conjunto de datos de archivo y escritura binarios al final del archivo
" rt + ": abrir un archivo de texto de lectura y escritura, para permitir la lectura y la escritura
"wt +": escribir o crear un archivo de texto se abre, para que el lector
"a +": abrir un archivo de texto de lectura y escritura, para permitir la lectura o la adición al final del archivo de datos
"rb +" : abierto de lectura y escritura de un archivo binario que permite la lectura y la escritura
"WB +": escribir o crear un archivo binario abierta, lo que permite la lectura y la escritura
"ab +": abierto de lectura y escritura de un archivo binario que permite la lectura, o datos adicionales al final del archivo

 

Para leer un archivo de texto en la memoria, con el código ASCII en código binario, y cuando el archivo se escribe en el disco como texto, también hay que convertir en código binario ASCII, así que lea el texto y escribir archivos de pasar más tiempo de conversión. Leer y escribir archivos binarios no existe dicha conversión.

 

  1. función 2.Fseek

Papel: para abrir archivos en modo binario, mover la posición del puntero del archivo a leer y escribir, por lo general después de abrir el archivo, leer y la posición de escritura en orden cronológico pero a veces se quiere cambiar la posición de la lectura y la escritura, por ejemplo, volver a empezar desde algún lugar, volver a leerlo.

 

fseek función prototipo: int fseek (FILE * flujo, tiempo de desplazamiento, origen int)

El primer parámetro es el puntero del archivo de flujo de
segundo parámetro de desplazamiento es el desplazamiento representa un número entero de un desplazamiento positivo, un número negativo indica un desplazamiento negativo a
la tercera conjunto de parámetros desde el origen en el que el principio del valor de desplazamiento archivo es: SEEK_CUR, SEEK_END o SEEK_SET
SEEK_SET: principio del archivo
SEEK_CUR: posición actual
SEEK_END: fin de archivo
en el que SEEK_SET, SEEK_CUR SEEK_END y 0, 1 y 2 y a su vez
brevemente:
fseek (fp, 100L, 0); fp puntero a la 100 bytes desde el comienzo del archivo;
fseek (fp, 100L ,. 1); puntero fp en el fichero de 100 byte a partir de una posición actual;
fseek (fp, 100L, 2); de nuevo puntero fp a las 100 palabras desde el final del archivo festival en.

 

  1. función 3.Ftell

ftell función prototipo: int largo ftell (FILE * stream);

Acción: la obtención de una posición actual de la posición del puntero del archivo el número de bytes desplazado con respecto al primer documento. Al tomar archivo aleatorio, la ubicación del archivo debido a los movimientos frecuentes antes y después del programa no es fácil determinar la ubicación actual del archivo. ftell función llamada puede determinar fácilmente la ubicación del archivo

Usando la función ftell puede saber fácilmente la longitud del archivo, tales como:

Fsekk (fp, 0,2) // mover el puntero de fichero fp al final del archivo

Len = ftell (fp) // obtener el número de bytes desplazado del primer extremo del archivo para el archivo, el número de bytes igual al número de bytes contenidos en el archivo

 

 

 

  1. función 4.Malloc

Función Prototipo: extern * malloc vacío (num_bytes unsignedInt);

sintaxis malloc es: name = puntero (tipo de datos *) malloc (longitud),

 

Acción: Los bloques de memoria longitud asignación de num_bytes bytes: si la asignación es puntero apunta con éxito a la memoria asignada se devuelve, de lo contrario, devuelve NULL NULL. Cuando ya no se utiliza la memoria, se debe utilizar la función free () para liberar los bloques de memoria. 

 

  1. función 5.fread y funciones fwrite

Función: Se utiliza para leer y escribir un bloque de datos.

prototipo:

Fread (tampón, el tamaño, el recuento, fp)

Fwrite (tampón, el tamaño, el recuento, fp)

Descripción:

(1) tampón: es un puntero a fread, se lee en la dirección de almacenamiento de datos. Para fwrite, los datos de dirección se vaya a utilizar.

Número de bytes a leer y escribir ;: (2) tamaño

(3) cuenta: el número de lectura y escritura al tamaño de bytes de elementos de datos;

(4) FP: un tipo de archivo puntero.

 

LR Funciones

  1. 1.lr_save_int (intValue, const char * param_name)

Y una conversión a un número entero tipo de cadena, y el valor se almacena en la cadena de parámetros.

  1. 2.lr_save_string (const char * param_value, const char * param_name)

Función: Null final de la cadena especificada asignado al parámetro

 

  1. 3.web_add_header (constchar * Cabeza, const char * Contenido)

Función: Para la siguiente solicitud web, la cabecera de la solicitud especificada

 

  1. 4.web_custom_request (constchar * requestName,, [EXTRARES,,] LAST);

Devuelve:
LR_PASS retorno (0) en nombre del éxito, LR_FAIL (1) para el fracaso.

Función: El método permite que cualquier solicitud HTTP y el cuerpo de la petición para crear personalizado. Por defecto, cuando el usuario solicita VuGen no explican otras funciones, se genera esta función.

Todos los Web Vusers, WAPVusers ejecuta en modo HTTP o (WSP) el modo de reproducción protocolo de sesión inalámbrica son compatibles con la función web_custom_request.

 

parámetros:

RequestName : nombre del paso, el nombre aparece en la vista de árbol VuGen.

 

De la lista de atributos : atributos soportados son los siguientes:

  • URL: dirección de la página.

  • Método: presentación, POST o GET página.

  • TargetFrame: contiene el nombre de los enlaces marco actual o recursos.

  • Enctype: tipo de codificación. Por ejemplo, texto / html, el valor de la solicitud de antemano se designa como el tipo de contenido. Si especifica un contenido-tpye en las noticias por adelantado, pero el contenido-tpye hace coincidir el cuerpo causa el error del lado del servidor. Se recomienda no modificar la grabación enctype obtenido.

Para cualquier "EncType" especificará web_add_ cobertura [auto_] función de cabecera Content-Type especifica. Al especificar el (valor nulo) "EncType =", no hay petición de cabecera "Content-Type". Cuando se omite "EncType", cualquier web_add_ función de cabecera [auto_] funcionará. Si ninguno ni EncType web_add_ función cabecera [auto_], y "method = post", "application / x-www-form-urlencoded" se utilizará como el valor predeterminado. En otros casos, sin encabezado de solicitud Content-Type.

Sólo cuando las opciones de grabación - Cuando se graba --html-basa script-- Recordwithin se selecciona la opción actual paso de guión, Lista de Recursos atributos se inserta en el código.

  • RecContentType: Content-Type cabecera de la respuesta al grabar una secuencia de comandos. Por ejemplo, texto / html, application / x-javascript y así sucesivamente. Cuando el atributo de recursos no se ha establecido, lo utilizan para determinar si la URL de destino se registra recursos. Esta propiedad contiene los recursos primarios y secundarios. El tipo más frecuentemente utilizado es el texto, la aplicación de la imagen. Dependiendo del tipo de modificaciones secundarias en muchos recursos. Por ejemplo: "RecContentType = text / html": indica el texto HTML. "RecContentType = application / msword": indica el uso actual es Msword.

  • Árbitro: página asociada a la página actual. Si tiene especificar explícitamente la dirección URL, esto puede ser omitido.

  • Cuerpo: solicitud cuerpo.

Cuerpo: regla de representación, las cadenas imprimibles. No se puede representar byte nulo. Todos los personajes están representados por una barra invertida. Nota: En la vieja escritura, se puede ver los caracteres no imprimibles se codifican en el cuerpo de la petición en formato hexadecimal. (Por ejemplo, "\\ X5c"), en este caso, se debe utilizar el "binario = 1" se identifica. byte nulo usando el " Archivo: //0.0.0.0/ " para representar. En su lugar, se colocará la solicitud para el nuevo guión en diferentes parámetros corporales ( "Cuerpo = ...", " BodyBinary = ...", Cuerpo = ... ").

BodyBinary: representan un código binario. caracteres no imprimibles en formato hexadecimal en el cuerpo de la petición file: // xhh / codificados. Donde HH es el valor hexadecimal. byte nulo usando el " Archivo: //0.0.0.0/ " para representar.

BodyUnicode: Inglés Americano, especialmente América UTF-16LE (ascendente hacia la izquierda) de codificación. Este codifica un 0 bytes se añade al final de cada personaje, por lo que los personajes son más fáciles de leer. Sin embargo, en VuGen parámetros reales son todos cero bytes eliminado. Pero antes de ser enviado al servidor Web, la función web_custom_request se volverá a añadir 0 bytes. Para los caracteres no imprimibles, utilice una sola barra invertida dijeron que no podían expresar byte nulo.

Nota: Si el cuerpo de la petición es superior a 100 K, en lugar de utilizar una variable de parámetros cuerpo. Variable se define en lrw_custom_body.h en.

  • la función RAW CUERPO :( está disponible actualmente sólo web_custom_request): cuerpo de solicitud se pasa como un puntero, un puntero a esta cadena de datos. solicitud binario puede ser enviado a través de atributo cuerpo BodyBinary (o atributos utilizando pasar cuerpo, el requisito previo es establecer "binario = 1"). En cualquier caso, este método requiere el uso de los caracteres no imprimibles carácter de escape de barra invertida en caracteres ASCII. Con el fin de tener una forma más conveniente para mostrar los datos en bruto, la propiedad Raw cuerpo entró en vigor, puede pasar un puntero que apunta a los datos binarios.

  • BodyFilePath: una ruta de archivo como el cuerpo de la petición transmitida. No se puede utilizar con los siguientes atributos: cuerpo, u otras propiedades o bienes sin procesar de la carrocería comprende BodyBinary, BodyUnicode, RAW_BODY_START o Binario = 1.

  • De recursos: URL que indica si los recursos. Es 1; no 0. Después de ajustar este parámetro, el parámetro RecContentType se ignora. "Recursos = 1", significa que la operación actual tiene éxito y poco donde la secuencia de comandos o no tiene que hacer. Si se produce un error durante la descarga de recursos, como advertencias en lugar de errores se manejan; si la URL es descargado por - impacto "en tiempo de ejecución de recursos Configuración-BrowserEmulation Descargar no HTML" para esta opción. información de respuesta de esta operación no es tan HTML para analizar. "Recursos = 0", indica que esta URL es importante, no afectada por la solicitud de envío (RTS), analizará cuando sea necesario.

 

  • ResourceByteLimit: No disponible en el modo HTTP, (un guión Vuser distrito, todas las funciones en esta región al mismo tiempo) en la zona concurrente Grupos no se puede utilizar. Zócalos se aplica sólo a la reproducción, WinInet no es aplicable.

 

  • nombre de archivo de instantánea, el uso asociación: instantánea.

 

  • Modo: dos tipos de grabación niveles de HTML, HTTP.

HTML Nivel: Grabe la acción intuitiva HTML en la interfaz Web actual. Con un paso a paso URL_web, web_link, web_image, web_submit_form para grabar estas acciones. VuGen registra sólo devuelve la página HTML solicitada, scripts y aplicaciones no se procesan.

HTTP Nivel: grabar todas las peticiones a la instrucción URL_web VuGen no se genera web_link, web_image, web_submit_form estas funciones. Este método es más flexible, pero el guión resultante no es intuitivo.

 

  • ExtraResBaseDir :( actualmente disponibles y única función web_custom_request): URL raíz, puso grupo EXTRARES. Se utiliza para resolver URL relativa (Traductor añadió: Al igual que en las rutas relativas y absolutas para Windows).

URL puede ser una ruta absoluta (por ejemplo http://weather.abc.com/weather/forecast.jsp?locCode=LFPO ), también puede ser una ruta relativa (por ejemplo, "forecast.jsp? LocCode = LFPO") .

La URL de descarga real está hecha por ruta absoluta, por lo que debe utilizar una ruta URL relativa para resolver la ruta URL raíz. Por ejemplo, usando http://weather.abc.com/weather/ como una ruta raíz de resolver "? Forecast.jsp locCode = LFPO", la URL final es: http://weather.abc.com/weather/forecast. JSP? locCode = LFPO . Si no "ExtraResBaseDir", la URL raíz predeterminada es la dirección URL de la página principal.

 

  • User-agent: agente de usuario, que es un nombre de encabezado HTTP que identifica la aplicación, normalmente un navegador web, se presenta al usuario interactiva y el servidor.

Por ejemplo: cabecera "User-Agent: Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.0)" se identifica en el navegador Internet Explorer de Windows NT 6.0. Otro valor de User-Agent utiliza para describir otros navegadores, o un programas distintas de los navegadores. Típicamente, una aplicación solicita todo el uso del mismo agente de usuario, según lo registrado por un parámetro de tiempo de ejecución para especificar (en tiempo de ejecución Marco-Browser Emulation-UserAgent). En cualquier caso, incluso en un simple proceso de navegador, todavía puede ser utilizado en componentes no navegador (como controles ActiveX) que interactúan directamente con el servidor, que tienen por lo general diferentes de las propiedades del agente de usuario del navegador. Designado "agente de usuario" indica que se trata de una solicitud no es un navegador. La cadena se especifica cabecera HTTP "User-Agent:" El uso, en algunos casos, será también afectan el comportamiento de la reproducción del guión. Por ejemplo, no utilice la memoria caché del navegador, en el supuesto de que los recursos pertenecen a la URL especificada, y así sucesivamente.

LoadRunner en sí no comprueba el valor de cadena especificado con el navegador en sí son los mismos.

  • Binario: "Binary = 1" indica una solicitud de página a cada cuerpo file: // x / valor ## de la forma (aquí, "##" representa dos dígitos hexadecimales), se reemplaza con un único valor hexadecimal bytes.

Si "Binario = 0" (por defecto), todas las secuencias de caracteres de acuerdo con la transferencia de valor sólo literalmente.

Observe el uso de dos barras. En el compilador C se interpretan como una sola barra doble barra. Si no hay bytes cero, una sola barra binario no puede ser igual en el caso de la utilización de un (por ejemplo, usando \ en lugar de en el x20 file: // en la x20 / ). Si necesita un byte cero, sólo se puede utilizar el archivo: // x00 / y ajuste "Binario = 1", \ x00 se truncará lógicamente

 

  • ContentEncoding: especifica el uso especificado en el cuerpo de la solicitud (gzip o el desinflado) es codificada (por ejemplo, comprimido), el correspondiente "ContentEncoding:" HTTP cabecera y la solicitud será transmitida juntos. Este parámetro se aplica a web_custom_request y web_submit_data.

  • EXTRARES: Los siguientes parámetros le mostrará la lista de atributos de los recursos.

  • identificador final: LAST.

Los Atributos de Lista de Recursos
mecanismo de la página Web produce lista de recursos no HTML que contiene el recurso de Javascript, ActiveX, applets de Java andFlash solicitó. VuGen de la opción de grabación, puede configurar estos recursos registrados en la operación actual (esta es la configuración por defecto) o como un paso separado para grabar

Publicado 30 artículos originales · ganado elogios 21 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44078196/article/details/104795356
Recomendado
Clasificación