Однажды мне нужно было протестировать ответ сервера и я решил что использовать для этого тяжеловесные швейцарские ножи вроде PhpUnit — обременительно. Осложнялось все тем — что инфраструктура была разбита на множество веб-микросервисов, которые в свою очередь работали на разных бэкендах(PHP, NodeJS, Python, GO). Посему я решил набросать простой класс, который на удивление оказался очень удобным инструментом для приемочного тестирования системы.
Знакомьтесь eXo-Test. Небольшой php-cli класс с которым проводить тесты — это действительно просто.
Предположим Вам нужно проверить доступность страниц и валидность контента на нем, например удостовериться что в каталоге есть товары. Нет ничего проще:
Теперь просто запустите созданный Вами скрипт из консоли:
Вам прилетит отбивка:
1) Успех:
2) Статус ответа 200(Ок), но контент не найден
3) Статус ответа не 200
Статусы ответа это хорошо, но теперь перед нами встает задача проверить функциональность системы. Опять же — просто добавьте воды!
Тут мы проверяем добавление товара в корзину:
Отлично, функционал почти проверили. Почти? Ну почти у любой системы будет API которое работает с файлами загруженными клиентом. Это мы тоже можем протестировать:
Тут по заданному адресу будет отправлена POST запросом полезная нагрузка + файл так же как если бы он был добавлен в
Пока что это все. Надеюсь этот инструмент будет полезен в первую очередь тем — кто до сих пор не тестирует свой код.
— Нам нужно быть уверенными что при каждом пуше у нас не сломается вся инфраструктура, сможешь сделать? -Легко!
Знакомьтесь eXo-Test. Небольшой php-cli класс с которым проводить тесты — это действительно просто.
Установка
можно просто почитать на GitHub
или тут
или тут
composer require overvoidjs/exotest:dev-master
<?php
include_once 'vendor/autoload.php';
Предположим Вам нужно проверить доступность страниц и валидность контента на нем, например удостовериться что в каталоге есть товары. Нет ничего проще:
<?php
include_once 'vendor/autoload.php';
$i = new Exo;
$url = 'http://localhost:7888/catalog/instrumentyi/';
$i->is_ok($url, '<div class="product-card-name">');
Теперь просто запустите созданный Вами скрипт из консоли:
php test.php
Вам прилетит отбивка:
1) Успех:
2) Статус ответа 200(Ок), но контент не найден
3) Статус ответа не 200
Статусы ответа это хорошо, но теперь перед нами встает задача проверить функциональность системы. Опять же — просто добавьте воды!
Тут мы проверяем добавление товара в корзину:
$payload = [
'product_id'=>'3401',
'count'=>'1'
];
@$cart_id = $i->post_it('http://localhost:7888/api/cart/add',$payload);
if(is_int($cart_id)){
echo "API Добавления в корзину ... Ok \n";
} else {
echo "API Добавления в корзину ... FAIL \n";
}
Подсветка ответов
Зеленым:
Красным:
echo "API Добавления в корзину ... \033[32m Ok\033[0m \n";
Красным:
echo "API Добавления в корзину ... \033[01;31m FAIL\033[0m \n";
Отлично, функционал почти проверили. Почти? Ну почти у любой системы будет API которое работает с файлами загруженными клиентом. Это мы тоже можем протестировать:
//Тут необходим CURL - но думаю он у всех есть
$i = new Exo;
$url = 'https://site.com/api/sameimg';
$payload = [
'data'=>'data'
];
$post_file_name = 'new_img';
$post_file_path = './new_img.jpg';
$test = $i->post_it_file($url,$payload,$post_file_name,$post_file_path);
Тут по заданному адресу будет отправлена POST запросом полезная нагрузка + файл так же как если бы он был добавлен в
input type="file" name="new_img"
Пока что это все. Надеюсь этот инструмент будет полезен в первую очередь тем — кто до сих пор не тестирует свой код.
catanfa
Почему бы не взять https://codeception.com/? там уже есть подсветка вывода)
trawl
Автор же аргументировал это:
Просто автор ещё не понял, что однажды его библиотека (если будет развиваться) станет очередным швейцарским ножом, но будет уже поздно :) У меня так с майлером получилось...