Однажды мне нужно было протестировать ответ сервера и я решил что использовать для этого тяжеловесные швейцарские ножи вроде PhpUnit — обременительно. Осложнялось все тем — что инфраструктура была разбита на множество веб-микросервисов, которые в свою очередь работали на разных бэкендах(PHP, NodeJS, Python, GO). Посему я решил набросать простой класс, который на удивление оказался очень удобным инструментом для приемочного тестирования системы.
— Нам нужно быть уверенными что при каждом пуше у нас не сломается вся инфраструктура, сможешь сделать? -Легко!

Знакомьтесь eXo-Test. Небольшой php-cli класс с которым проводить тесты — это действительно просто.

image

Установка
можно просто почитать на 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) Успех:

image

2) Статус ответа 200(Ок), но контент не найден

image

3) Статус ответа не 200

image

Статусы ответа это хорошо, но теперь перед нами встает задача проверить функциональность системы. Опять же — просто добавьте воды!

Тут мы проверяем добавление товара в корзину:


$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" 


Пока что это все. Надеюсь этот инструмент будет полезен в первую очередь тем — кто до сих пор не тестирует свой код.