testTranslate - silviaalejandra/todo-list-aws GitHub Wiki
Test de la función Translate
Test unitario
Se incluyeron las pruebas unitarias de la funcion Translate modificando el archivo /test/unit/TestToDo.py. El foco de pruebas fueron todas las porciones de código de soporte incluidas en el fichero todoList.py
Getters
def test_get_translate(self):
print ('---------------------')
print ('Start: test_get_translate')
from src.todoList import get_translate
os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
result = get_translate(None)
self.assertIsNotNone(result)
print ('End: test_get_translate')
def test_get_comprehend(self):
print ('---------------------***---')
print ('Start: test_get_comprehend')
from src.todoList import get_comprehend
os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
result = get_comprehend(None)
self.assertIsNotNone(result)
print ('End: test_get comprehend')
Funciones
def test_get_languaje(self):
print ('---------------------')
print ('Start: test_get_languaje')
from src.todoList import get_item_languaje
# Testing file functions
print ('Texto:' + self.text)
responseLanguaje = get_item_languaje(
self.text,
self.comprehend)
print ('Response Languaje:' + str(responseLanguaje))
self.assertEqual(responseLanguaje, self.origin_lang)
print ('End: test_get_languaje')
def test_get_language_err(self):
print ('---------------------')
print ('Start: test_err_get_languaje---------------')
from src.todoList import get_item_languaje
self.assertRaises(
Exception,
get_item_languaje("*", self.comprehend))
print ('End: test_err_get_languaje---------------')
def test_translate_text_err(self):
print ('---------------------')
print ('Start: test_err_translate_text')
from src.todoList import translate_text
self.assertRaises(Exception,
translate_text(self.text,
None,
"es",
self.translate))
self.assertRaises(TypeError,
translate_text(self.text,
"ii",
"es",
self.translate))
self.assertRaises(Exception,
translate_text(self.text,
"ii",
"es",
self.translate))
print ('End: test_err_translate_text')
def test_translate_text(self):
print ('---------------------')
print ('Start: test_translate_text')
from src.todoList import translate_text
# Testing file functions
print ('Texto:' + self.text)
response = translate_text(
self.text,
self.origin_lang,
self.dest_lang,
self.translate)
print ('Response Translate:' + str(response))
self.assertEqual(response, self.traduccion)
print ('End: test_translate_text')
# test por tranlate.py-------------------------
# ---------------------------------------------
def test_translate_item(self):
print ('---------------------')
print ('Start: test_translate_item')
from src.todoList import get_item_languaje
from src.todoList import translate_item
from src.todoList import put_item
responsePut = put_item(self.text, self.dynamodb)
print ('Response PutItem' + str(responsePut))
idItem = json.loads(responsePut['body'])['id']
textoItem = json.loads(responsePut['body'])['text']
print ('Id item:' + idItem)
# Testing file functions
# Table mock
print ('Texto:' + textoItem)
responseLanguaje = get_item_languaje(
textoItem,
self.comprehend)
print ('Response Languaje:' + str(responseLanguaje))
print ('lenguaje origen:' + self.origin_lang +
' Lenguaje destino:'+self.dest_lang)
self.assertEqual(responseLanguaje, self.origin_lang)
responseTranslate = translate_item(
textoItem,
responseLanguaje,
self.dest_lang,
self.translate)
print ('Response translate:' + str(responseTranslate))
self.assertEqual(200, responseTranslate['statusCode'])
print ('End: test_translate_item')
def test_translate_item_err(self):
print ('---------------------')
print ('Start: test_translate_item_err')
from src.todoList import translate_item
from src.todoList import put_item
responsePut = put_item(self.text, self.dynamodb)
print ('Response PutItem' + str(responsePut))
idItem = json.loads(responsePut['body'])['id']
print ('Id item:' + idItem)
self.assertRaises(Exception,
translate_item(idItem,
"ii",
self.translate,
self.dynamodb))
self.assertRaises(TypeError,
translate_item(idItem,
None,
self.translate,
self.dynamodb))
print ('End: test_err_translate')
Test integración
Se incluyó una prueba de traduccion dentro de los test integrales modificando el archivo /test/integration/todoApitest.py
#Test de Translate-----------------------------------------------
#----------------------------------------------------------------
def test_api_translatetodo(self):
print('---------------------------------------')
print('Starting - integration test Translate TODO')
#Add TODO
url = BASE_URL+"/todos"
data = {
"text": "Integration text example - TRADUCIR"
}
response = requests.post(url, data=json.dumps(data))
json_response = response.json()
print('Response Add Todo: '+ str(json_response))
jsonbody= json.loads(json_response['body'])
ID_TODO = jsonbody['id']
print ('ID todo:'+ID_TODO)
self.assertEqual(
response.status_code, 200, "Error en la petición API a {url}"
)
self.assertEqual(
jsonbody['text'], "Integration text example - TRADUCIR", "Error en la petición API a {url}"
)
#Test Translate TODO
url = BASE_URL+"/todos/"+ID_TODO+"/it"
response = requests.get(url)
json_response = response.json()
print('Response Translate Todo: '+ str(json_response))
self.assertEqual(
response.status_code, 200, "Error en la petición API a {url}"
)
self.assertEqual(
json_response['text'], "Esempio di testo di integrazione - TRANSL", "Error en la petición API a {url}"
)
#Delete TODO to restore state
url = BASE_URL+"/todos/"+ID_TODO
response = requests.delete(url)
self.assertEqual(
response.status_code, 200, "Error en la petición API a {url}"
)
print('End - integration test Translate TODO')
#----------------------------------------------------------------
La salida de las pruebas se encuentra en el fichero de ejecucion #69
logs/translateIntegrationTest.log
Y de ejecucion #104
Starting - integration test Translate TODO
Response Add Todo: {'statusCode': 200, 'body': '{"id": "c4c88a6a-7a65-11ec-8725-b22f520568f9", "text": "Integration text example - TRADUCIR", "checked": false, "createdAt": "1642733805.3403575", "updatedAt": "1642733805.3403575"}'}
ID todo:c4c88a6a-7a65-11ec-8725-b22f520568f9
Response Translate Todo: {'id': 'c4c88a6a-7a65-11ec-8725-b22f520568f9', 'text': 'Esempio di testo di integrazione - TRANSL', 'checked': False}
End - integration test Translate TODO
Cobertura de codigo
Nota
Al momento de la entrega no se ha podido superar el inconveniente de las pruebas unitarias que invocan las funciones Comprehend.detect_dominant_language y Translate.translate_text. No se han podido pasar de forma correcta los permisos del rol labRole para ejecutarlas. Sin embargo las pruebas integrales en el pipeline y las realizadas luego desde una consola indican que la funcion translate traduce sin problema alguno.