Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. ¿Qué son las pruebas de interfaz?
Como sugiere el nombre, las pruebas de interfaz consisten en probar la interfaz entre sistemas o componentes, principalmente para verificar el intercambio de datos, la transferencia y el control de los procesos de gestión y las dependencias lógicas mutuas. Los protocolos de interfaz se dividen en HTTP, WebService, Dubbo, Thrift, Socket y otros tipos. Los tipos de prueba se dividen principalmente en pruebas funcionales, pruebas de rendimiento, pruebas de estabilidad, pruebas de seguridad, etc.
En el modelo "piramidal" de pruebas en capas, las pruebas de interfaz pertenecen a la segunda capa de pruebas de integración de servicios. En comparación con las pruebas automatizadas de la capa de interfaz de usuario (principalmente WEB o APLICACIÓN), las pruebas automatizadas de interfaz tienen mayores beneficios, son fáciles de implementar, tienen bajos costos de mantenimiento y tienen una mayor relación entrada-salida. Es la primera opción que todas las empresas deben realizar. pruebas automatizadas.
A continuación, tomamos una interfaz HTTP como ejemplo para presentar completamente el proceso de prueba de automatización de la interfaz: desde el análisis de requisitos hasta el diseño de casos de uso, desde la escritura de scripts, la ejecución de pruebas hasta el análisis de resultados, y proporcionamos un diseño de casos de uso completo y scripts de prueba.
2. Proceso básico
El proceso de prueba automatizado de la función de interfaz básica es el siguiente:
Análisis de requisitos->Diseño de casos de uso->Desarrollo de scripts->Ejecución de pruebas->Análisis de resultados
2.1 Interfaz de muestra
Nombre de la interfaz: búsqueda de películas de Douban
Dirección del documento de interfaz: https://developers.douban.com/wiki/?title=movie_v2#search
Ejemplo de llamada de interfaz:
1) Búsqueda por reparto y equipo: https://api.douban.com/v2/movie/search?q=Zhang Yimou
2) Buscar por título de película: https://api.douban.com/v2/movie/search?q=西游之西游
3) Búsqueda por género: https://api.douban.com/v2/movie/search?tag=comedy
3. Análisis de necesidades
El análisis de requisitos se refiere a documentos como los requisitos y el diseño. Sobre la base de comprender los requisitos, también es necesario comprender la lógica de implementación interna y, en esta etapa, se pueden señalar aspectos irrazonables u omitidos de los requisitos y el diseño.
Por ejemplo: interfaz de búsqueda de películas de Douban, el requisito que entiendo es admitir la búsqueda de títulos de películas, miembros del elenco y etiquetas, y devolver los resultados de la búsqueda en páginas.
4. Diseño de casos de uso
El diseño de casos de uso se basa en comprender los requisitos de prueba de la interfaz y utilizar software de mapas mentales como MindManager o XMind para escribir el diseño de casos de prueba. El contenido principal incluye verificación de parámetros, verificación de funciones, verificación de escenarios comerciales, verificación de seguridad y rendimiento, etc. Los métodos de diseño de casos de uso incluyen división de clases de equivalencia, análisis de valores límite, análisis de escenarios, diagramas de causa y efecto, tablas ortogonales, etc.
Para la parte de prueba de la función de la interfaz de búsqueda de películas de Douban, nos centramos principalmente en tres aspectos: verificación de parámetros, verificación de funciones y verificación de escenarios comerciales. Los ejemplos de prueba de diseño son los siguientes:
Según el diseño del caso de prueba escrito anteriormente, utilizamos el marco python+nosetests para escribir scripts de prueba automatizados relevantes. Puede realizar plenamente las funciones de prueba automatizada de interfaz, ejecución automática y envío por correo electrónico de informes de prueba.
Las bibliotecas lib necesarias son las siguientes. Puede instalarlas usando el comando pip:
-
- pip install nose
-
- pip install nose-html-reporting
-
- pip install requests
Usando la biblioteca de solicitudes, podemos escribir fácilmente el método de llamada de interfaz anterior (como buscar q = Andy Lau, el código de muestra es el siguiente):
-
- #coding=utf-8
-
- import requests
-
- import json
-
-
- url = 'https://api.douban.com/v2/movie/search'
-
- params=dict(q=u'刘德华')
-
- r = requests.get(url, params=params)
-
- print 'Search Params:n', json.dumps(params, ensure_ascii=False)
-
- print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)
Cuando realmente escribimos scripts de prueba automatizados, necesitamos realizar alguna encapsulación. En el siguiente código, encapsulamos la interfaz de búsqueda de películas de Douban. El método test_q solo necesita usar el método de rendimiento proporcionado por nosetests para recorrer cómodamente cada conjunto de pruebas en la lista qs:
-
- class test_doubanSearch(object):
-
-
- @staticmethod
-
- def search(params, expectNum=None):
-
- url = 'https://api.douban.com/v2/movie/search'
-
- r = requests.get(url, params=params)
-
- print 'Search Params:n', json.dumps(params, ensure_ascii=False)
-
- print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)
-
-
- def test_q(self):
-
- # 校验搜索条件 q
-
- qs = [u'白夜追凶', u'大话西游', u'周星驰', u'张艺谋', u'周星驰,吴孟达', u'张艺谋,巩俐', u'周星驰,大话西游', u'白夜追凶,潘粤明']
-
- for q in qs:
-
- params = dict(q=q)
-
- f = partial(test_doubanSearch.search, params)
-
- f.description = json.dumps(params, ensure_ascii=False).encode('utf-8')
-
- yield (f,)
Podemos escribir scripts de prueba automatizados para cada función en secuencia de acuerdo con el diseño del caso de prueba.
5.3 Verificación de resultados
Al probar la interfaz manualmente, debemos juzgar si la prueba pasa en función de los resultados devueltos por la interfaz. Lo mismo ocurre con las pruebas automatizadas.
Para esta interfaz, buscamos "q=Andy Lau" y debemos determinar si los resultados devueltos contienen "actor Andy Lau o título de la película Andy Lau". Al buscar "etiqueta = comedia", debemos determinar el tipo de ". película en los resultados devueltos Si es "comedia", es necesario verificar si el número de resultados devueltos es correcto al paginar los resultados, etc. El código de verificación de resultado completo es el siguiente:
-
- class check_response():
-
- @staticmethod
-
- def check_result(response, params, expectNum=None):
-
- # 由于搜索结果存在模糊匹配的情况,这里简单处理只校验第一个返回结果的正确性
-
- if expectNum is not None:
-
- # 期望结果数目不为None时,只判断返回结果数目
-
- eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))
-
- else:
-
- if not response['subjects']:
-
- # 结果为空,直接返回失败
-
- assert False
-
- else:
-
- # 结果不为空,校验第一个结果
-
- subject = response['subjects'][0]
-
- # 先校验搜索条件tag
-
- if params.get('tag'):
-
- for word in params['tag'].split(','):
-
- genres = subject['genres']
-
- ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))
-
-
- # 再校验搜索条件q
-
- elif params.get('q'):
-
- # 依次判断片名,导演或演员中是否含有搜索词,任意一个含有则返回成功
-
- for word in params['q'].split(','):
-
- title = [subject['title']]
-
- casts = [i['name'] for i in subject['casts']]
-
- directors = [i['name'] for i in subject['directors']]
-
- total = title + casts + directors
-
- ok_(any(word.lower() in i.lower() for i in total),
-
- 'Check {0} failed!'.format(word.encode('utf-8')))
-
-
- @staticmethod
-
- def check_pageSize(response):
-
- # 判断分页结果数目是否正确
-
- count = response.get('count')
-
- start = response.get('start')
-
- total = response.get('total')
-
- diff = total - start
-
-
- if diff >= count:
-
- expectPageSize = count
-
- elif count > diff > 0:
-
- expectPageSize = diff
-
- else:
-
- expectPageSize = 0
-
-
- eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))
Para el script de prueba anterior, podemos usar el comando nosetests para ejecutar fácilmente pruebas automatizadas y usar el complemento nose-html-reporting para generar informes de prueba en formato html.
Ejecute el comando de la siguiente manera:
nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html
Una vez completada la prueba, podemos utilizar el método proporcionado por el módulo smtplib para enviar el informe de prueba en formato html. El proceso básico es leer el informe de prueba -> agregar contenido de correo electrónico y archivos adjuntos -> conectarse al servidor de correo -> enviar correo electrónico -> salir. El código de muestra es el siguiente:
-
- import smtplib
-
- from email.mime.text import MIMEText
-
- from email.mime.multipart import MIMEMultipart
-
-
- def send_mail():
-
- # 读取测试报告内容
-
- with open(report_file, 'r') as f:
-
- content = f.read().decode('utf-8')
-
-
- msg = MIMEMultipart('mixed')
-
- # 添加邮件内容
-
- msg_html = MIMEText(content, 'html', 'utf-8')
-
- msg.attach(msg_html)
-
-
- # 添加附件
-
- msg_attachment = MIMEText(content, 'html', 'utf-8')
-
- msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)
-
- msg.attach(msg_attachment)
-
-
- msg['Subject'] = mail_subjet
-
- msg['From'] = mail_user
-
- msg['To'] = ';'.join(mail_to)
-
- try:
-
- # 连接邮件服务器
-
- s = smtplib.SMTP(mail_host, 25)
-
- # 登陆
-
- s.login(mail_user, mail_pwd)
-
- # 发送邮件
-
- s.sendmail(mail_user, mail_to, msg.as_string())
-
- # 退出
-
- s.quit()
-
- except Exception as e:
-
- print "Exceptioin ", e
Abra el informe de prueba generado después de ejecutar nosetests. Se puede ver que en esta prueba se ejecutaron un total de 51 casos de prueba, 50 de los cuales tuvieron éxito y uno falló.
En el caso de uso fallido, puede ver que los parámetros pasados son: {"count": -10, "tag": "Comedy"}, y la cantidad de resultados devueltos en este momento no coincide con nuestros resultados esperados (cuando El recuento es un número negativo, el resultado esperado es La interfaz informa un error o usa el valor predeterminado de 20, pero el número real de resultados devueltos es 189. Date prisa e informa el error a Douban - -)
7. Guión completo
He subido el script de prueba automatizado completo de la interfaz de búsqueda de películas de Douban a GitHub. Dirección de descarga: test_demo/test_douban en master · loveoo/test_demo · GitHub
Una vez completada la descarga, utilice el siguiente comando para realizar pruebas completas de automatización de la interfaz y enviar el informe de prueba final por correo electrónico:
prueba de python_doubanSearch.py
Finalmente envíe el correo electrónico del informe de prueba, la captura de pantalla es la siguiente
Finalmente, quiero agradecer a todos los que leen atentamente mi artículo. La reciprocidad siempre es necesaria, aunque no es algo muy valioso, pero si puedes usarla, puedes tomarla directamente:
Esta información debería ser el almacén de preparación más completo y completo para los amigos [de pruebas de software]. ¡Este almacén también ha acompañado a decenas de miles de ingenieros de pruebas en el viaje más difícil!