Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar todas las opciones de la consola durante las pruebas web

Cómo utilizar todas las opciones de la consola durante las pruebas web

Descripción de la herramienta

cURL es una herramienta de transferencia de archivos que utiliza la sintaxis de URL para funcionar en modo de línea de comandos. Es una herramienta gratuita escrita y mantenida por entusiastas del código abierto. Linux, Mac, etc. Hay docenas de sistemas operativos, la última versión es 7.27.0, pero recomiendo a todos que usen 7.26.0, pueden descargar la versión 7.26.0 desde aquí.

La siguiente es la traducción de la introducción oficial:

cURL es una herramienta de línea de comandos que utiliza la sintaxis de URL para transferir datos y admite

DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet

y TFTP. cURL admite certificados SSL, HTTP POST, HTTP

PUT, carga FTP, carga de formulario básico HTTP, proxies, cookies, autenticación de usuario+contraseña (Básica, Digest, NTLM,

Negotiate, kerberos...), reanudar transferencias de archivos, túneles proxy y más.

Python es un lenguaje de programación informática literal y orientado a objetos inventado por Guido van Rossum a finales de 1989. Su potencia y facilidad de uso no necesitan mayor explicación en el desarrollo web o en el desarrollo. desarrollo con requisitos de alta velocidad, pero debido a que es un lenguaje de secuencias de comandos, su rendimiento no siempre es tan bueno como el de C ++, C y otros lenguajes.

Este artículo utiliza principalmente ejemplos para ilustrar algunos de los usos de estas dos herramientas en las pruebas, y quedan más usos para que todos continúen explorando.

Escenarios de aplicación

Utilice cURL para simular que el cliente consulta el servidor

Al realizar pruebas de interfaz, primero debe pedirle al desarrollador que proporcione la lista de interfaces y parámetros correspondientes, para que pueda verificar si el método de prueba es correcto durante la prueba. Sin embargo, si puede usar un navegador para simular la operación, también puede probarlo usted mismo primero. Los ejemplos se mencionarán más adelante.

Primero use el cliente para acceder a la interfaz del servidor que debe probarse y use Wireshark para capturar paquetes. Los resultados son los siguientes:

Publique los datos de la cadena de consulta en file_health_info. Interfaz .php del servidor en modo multiparte.

Consejos:

La versión para Windows de cURL no es una herramienta integrada en el sistema como Linux o Mac. Debe descargarse si desea utilizarla desde el símbolo del sistema. , debe saltar a la ubicación de la herramienta. Solo se puede ejecutar en el directorio, lo cual es muy problemático. Podemos colocar el archivo de la herramienta directamente en el directorio de Windows, de modo que no importa en qué directorio se encuentre, el "curl". El comando se puede utilizar para ejecutar la herramienta directamente.

CURL envía datos en modo de publicación de forma predeterminada, por lo que solo necesita agregar el modo multiparte. La explicación de -F en la ayuda de cURL es:

-F, --form CONTENT. Especifique datos POST de varias partes HTTP (H)

--form-string STRING Especifique datos POST de varias partes HTTP (H)

--ftp-account DATA Cadena de datos de cuenta (F)< / p>

--ftp-alternative-to-user COMMAND Cadena para reemplazar "USUARIO [nombre]" (F)

--ftp-create-dirs Crea los directorios remotos si no están presentes ( F )

--ftp-method [MULTICWD/NOCWD/SINGLECWD] Controla el uso de CWD (F)

--ftp-pasv Usa PASV/EPSV en lugar de PORT (F)< / p>

Especificar datos POST multiparte HTTP simplemente cumple con nuestros requisitos, por lo que la declaración simulada es:

curl -F "newmd5=3bcad21af5f17c1fbff419137297c942###25016566###d:\test.exe ## #1###"

Los siguientes son todos los parámetros. Confirme con el desarrollador antes de realizar la prueba.

Sin embargo, debido a que el servidor admite la devolución de datos en modo gzip, también podemos agregar el parámetro --compressed a la solicitud, que es:

curl --compressed -F "newmd5 =3bcad21af5f17c1fbff419137297c942 ###25016566###d:\test.exe###1###"

Para juzgar mejor si la interfaz del servidor es normal, además de juzgar los datos devueltos, También necesitamos analizar el encabezado del paquete de datos devuelto por el servidor, por lo que también puede agregar el parámetro -i a la solicitud cURL. Finalmente, la declaración de prueba se convierte en:

curl –i --comprimido -. F "newmd5=3bcad21af5f17c1fbff419137297c942## #25016566###d:\test.exe###1###"

Una vez completada la simulación, primero debemos considerar juzgar el valor de retorno. ejecute esta declaración en el símbolo del sistema, observe el valor de retorno.

Después de ejecutar el comando anterior, los datos devueltos son los siguientes:

HTTP/1.1 100 Continuar

HTTP/1.1 200 OK

Fecha: viernes, 24 de agosto de 2012 07:47:45 GMT

Tipo de contenido: aplicación/xml

Codificación de transferencia: fragmentada

Conexión: mantener -alive

Servidor: servidor web 360

Codificación de contenido: gzip

cost="999.92752075195"/>

3bcad21af5f17c1fbff419137297c942

4040

40.3

2

Los encabezados de los paquetes de datos son comunes. En términos generales, solo necesitamos determinar que el encabezado contiene "HTTP/1.1 200

OK" para asegurarnos de que El servidor devuelve datos normalmente. Además, puede ver en el contenido que se trata de un paquete de datos en formato XML. Solo necesitamos determinar si hay campos clave. Por ejemplo, después de confirmarlos, podemos agregar el siguiente código de caso en Python:

Primero ejecute el comando curl especificado:

response = os.popen('''curl -i --compressed -F "newmd5=3bcad21af5f17c1fbff419137297c942###25016566## #d:\test .exe###1###"

Luego determine si el campo que queremos existe en el valor de retorno:

self.assertNotEqual(response.find( 'HTTP/1.1 200 OK'),-1)

self.assertNotEqual(response.find(''),-1)

El contenido anterior parece casi suficiente, pero no es lo suficientemente riguroso. En la práctica, debido a que los datos devueltos por el servidor se obtienen de la base de datos, también necesitamos consultar la base de datos para obtener el valor especificado y determinar si es consistente con el del paquete de datos, por ejemplo:

Primer uso del servidor de base de datos de inicio de sesión de Python:

conn = MySQLdb.connect(host='172.22.54.31', user='user',passwd='test321',db='cloud')

cursor = conn.cursor()

count = cursor.execute('SELECCIONAR plevel DEL archivo donde md5="3bcad21af5f17c1fbff419137297c942"')

resultado = cursor.fetchone ()

Luego determine si el nivel en el valor de retorno es el valor en la base de datos:

self.assertNotEqual(response.find('''%s'''%result [0]),-1 )

Además de utilizar herramientas como cURL para la simulación durante las pruebas, también puede escribir código en Python u otros lenguajes para publicar datos. simplicidad en ese momento, elegí usar cURL para realizar pruebas.

Utilice cURL para simular el inicio de sesión en la consola

Hablando de inicio de sesión simulado o clics simulados, muchos estudiantes pueden pensar directamente en herramientas como QTP que simulan operaciones de interfaz. La mayor desventaja es que depende demasiado de los controles. Si los controles de la interfaz cambian, entonces todo el script puede no ser válido. La programación actual tiende a separar la lógica de la interfaz, por lo que cuando se modifica la interfaz. , la parte inferior no se moverá para las interfaces funcionales, los desarrolladores pueden modificar los controles de la interfaz en cualquier momento. Si aún usa

QTP y otros métodos de clic simulados para realizar pruebas, el resultado puede ser la mitad del resultado. el esfuerzo. Este problema se puede evitar si utiliza directamente la interfaz durante la prueba.

El siguiente ejemplo simula el inicio de sesión en la consola. La URL de inicio de sesión es:

Primero, utilice el navegador para iniciar sesión una vez y ver el efecto real.

Consejos:

Se recomienda utilizar Chrome al probar php u otros programas web, porque sus

herramientas de desarrollo integradas son muy fáciles de usar. Por supuesto, Firefox o IE9 también lo tienen. Para herramientas similares, depende de sus hábitos personales. Presione F12 para abrir la herramienta, seleccione la pestaña Red, luego ingrese el nombre de usuario y la contraseña y haga clic en Iniciar sesión. En este momento, todos los datos solicitados por el navegador desde la consola durante el proceso de inicio de sesión se mostrarán debajo de Red, incluido el tipo de solicitud. Datos de formulario, etc., estas son las fuentes de datos para nuestras operaciones de simulación.

Puede obtener información clave en la imagen de arriba: URL de solicitud, tipo de solicitud, tipo de datos, contenido de datos y compatibilidad con la compresión gzip, etc. Usamos curl para simular de la siguiente manera:

curl -i --compressed -d "username=admin" -d "userpass=admin"

Las razones para usar -i y - -compressed vendrá más adelante. Ya se ha mencionado un ejemplo, por lo que no entraré en detalles aquí. La atención se centra en el siguiente -d, que se explica en la ayuda oficial:

-d, -. -data DATOS HTTP POST datos (H)

--data-ascii DATOS HTTP POST datos ASCII (H)

--data-binary DATOS HTTP POST datos binarios (H)

--data-urlencode DATA HTTP POST URL de datos codificada (H)

--delegación STRING Permiso de delegación GSS-API

--digest Usar autenticación implícita HTTP (H)

--disable -eprt Inhibir usando EPRT o LPRT (F)

--disable-epsv Inhibir usando EPSV (F)

Y el Los datos que devolvemos desde Developer Tools ya conocen el formato de los datos devueltos. Es

"application/x-www-form-urlencoded", por lo que obviamente es necesario utilizar la función -d HTTP POST de codificación de URL de datos. . Sin embargo, también existe la forma de palabra clave en el formato. ¿Podría ser que el inicio de sesión con el parámetro -F también sea compatible? Pruebe:

curl -i --compressed -F "username=admin" -F "userpass" =admin", y funciona. Jaja~

Tal vez algunos estudiantes tengan preguntas, ¿por qué no simular warnsetup y hacer referencia? Esto se debe a que durante la prueba, se descubrió que la interfaz de inicio de sesión solo requiere un nombre de usuario y La contraseña. Refer se usa para registrar la página web de origen, lo cual es útil aquí. No es grande, warnsetup solo se usa para verificar el código de inicio de sesión, esto se ha eliminado.

A continuación, para verificar los datos, ejecutamos el comando anterior en el símbolo del sistema y el resultado devuelto es el siguiente:

HTTP/1.1 302 movido temporalmente

Fecha: viernes, 24 de agosto de 2012 08:29:07 GMT

Tipo de contenido: texto/html

Codificación de transferencia: fragmentada

Conexión: mantener -alive

X-Powered-By: PHP/5.4.3

Set-Cookie: PHPSESSID=4711d2365de9aaaca0c28b1ca52183f0 path=/

Expira: jueves, 19 noviembre de 1981 08:52:00 GMT

Control de caché: sin almacenamiento, sin caché, debe revalidar, verificación posterior=0, verificación previa=0

Pragma : no- cache

Set-Cookie: PHPSESSID=81d4bb65e888c1b6347120641eb4798b; path=/

Ubicación: ./index.php

Servidor: servidor web 360

Es extraño, a primera vista, la consola no devuelve ninguna información útil, pero la frase HTTP/1.1 302 Moved

¿Te resulta especialmente familiar temporalmente? Este 302 especial (representa presionar -G "

"

El significado de cada parámetro debe entenderse por separado: el nombre de archivo representa la palabra clave ingresada, bg representa la primera fila de la base de datos, lm Indica que *** muestra 19 filas de datos. Los datos devueltos por esta interfaz son los siguientes:

{"rows":[{"level":"10","plevel":"10" ,"id": "20","md5":"59c7dd2eafdbe86b2e23bcdabb575448","soft_name":"","soft_desc":"","file_desc":"QVBJIFRyYWNpbmcgWDg2IEhvb2sgRW5naW5l","is_sys_file":"127","size" :"4 1984", "is_rep":"0","file_name":"apihex86.d

ll","file_version":"6.1.7600.16385","product_version":"6.1.7600.16385 ","copyright": "\u00a9 Microsoft Corporation. Todos los derechos reservados.","lang":"0","org_name":"YXBpaGV4ODYuZGxs","sign_name":"TWljcm9zb2Z0IFdpbmRvd3M=","company_name":"Microsof

t Corporation","update_time":"2012-07-31 18:14:27","create_time":"2012-07-31 18:14:27","creator_mid":"15be5b7dce003cdc2c1d1448afcf6cf0 "}],"count ":"1"}

Son atributos de archivo e información de archivo respectivamente, que involucran dos tablas de base de datos, por lo que verificar los datos requiere usar Python para obtener la información correspondiente de las dos tablas. .

Obtenga atributos de archivo de la primera tabla, por ejemplo, solo obtenga plevel:

SELECT plevel FROM `file` donde md5="59c7dd2eafdbe86b2e23bcdabb575448"

Desde la segunda tabla Obtenga información de archivo de una tabla, por ejemplo, solo obtenga nombre_compañía:

SELECT nombre_compañía DESDE información_archivo donde md5="59c7dd2eafdbe86b2e23bcdabb575448"

El código Python es el siguiente:

conn = MySQLdb. connect(host='%s'% self.host, usuario='usuario',passwd='test321',db='cloud')

cursor = conn. cursor()

count = cursor.execute('SELECT plevel FROM `file` donde md5="111111932490c813bf5ea9d8aa6fa60c"')

resultado = cursor.fetchone()

self.assertNotEqual(response. find(str(resultado[0])),-1)

count = cursor.execute('SELECT nombre_empresa FROM file_info donde md5="111111932490c813bf5ea9d8aa6fa60c"')

resultado1 = cursor .fetchone()

self.assertNotEqual(response.find(result1[0]),-1)

Por supuesto, el caso de prueba riguroso es que cada campo de atributo debe buscarse y coincidir, no entraré en detalles aquí.