fcgi 脚本是如何测试的?
How are fcgi scripts tested?
我是新手,如果这听起来很幼稚,请原谅我。我用 fastcgi++ 写了一个脚本。我测试了基本用例。但作为一名优秀的软件工程师,我想在每次进行更改时测试脚本,以确保我不会破坏任何东西。
我以前就是这样做的:
这是我的目录结构:
script:
- bin
- build (contained the bash script to compile the script)
- src
- tests
- build (contained bash script to compile the test)
- src (contained the test file)
- output
我破解了我测试的方式。我曾经使用 curl 调用我的脚本并将其输出重定向到 tests/output 中的一个文件(使用相对路径)并将其与预期输出进行比较。我可以这样做,因为测试是手动编译的,我只是在将目录更改为 tests/build
后才执行测试。我最近决定使用构建系统。我选择了介子。使用介子测试的方法是运行宁meson test
或ninja test
。现在的问题是我无法控制测试的位置 运行。
这种情况怎么测试?你如何测试你的 fcgi 脚本?
编辑: 这是我如何编译和测试的示例。这是一个完整的可验证示例:
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
class test : public Fastcgipp::Request<char>
{
bool response() {
nlohmann::json output;
out << "Content-Type: application/json; charset:utf-8\r\n\r\n";
out << "{\"success\": true}";
}
}
int main() {
Fastcgipp::Manager<test> manager;
manager.setupSignals();
manager.listen();
manager.start();
manager.join();
}
你可以认为响应为主。这是您开始处理事物的地方。您可以获取输入和输出以及所有这些好东西。
这就是我正在测试的方式:
TEST(test, test1) {
std::string fileName = "test.txt";
nlohmann::json input, output;
input["success"] = true;
std::system(std::string("curl -X GET \"localhost/cgi-bin/test.fcg\" > " + fileName).c_str());
std::ifstream file(fileName);
std::string out;
std::getline(file, out);
output = nlohmann::json::parse(out);
ASSERT_EQ(input, output);
std::system(std::string("rm " + fileName).c_str());
}
注: nlohmann::json是一个json解析器,我在test
中使用google测试
The problem is now I do not control from where the test is run.
默认情况下测试是在构建目录中的 运行,但是可以使用参数 workdir(参见 reference)来设置 将用作测试工作目录的绝对路径,例如:
exe = executable(...)
wdir = join_paths(meson.current_source_dir(), 'some_dir')
test('basic', exe, workdir : wdir)
检查 meson object 其他可能的参考目录。
我是新手,如果这听起来很幼稚,请原谅我。我用 fastcgi++ 写了一个脚本。我测试了基本用例。但作为一名优秀的软件工程师,我想在每次进行更改时测试脚本,以确保我不会破坏任何东西。
我以前就是这样做的:
这是我的目录结构:
script:
- bin
- build (contained the bash script to compile the script)
- src
- tests
- build (contained bash script to compile the test)
- src (contained the test file)
- output
我破解了我测试的方式。我曾经使用 curl 调用我的脚本并将其输出重定向到 tests/output 中的一个文件(使用相对路径)并将其与预期输出进行比较。我可以这样做,因为测试是手动编译的,我只是在将目录更改为 tests/build
后才执行测试。我最近决定使用构建系统。我选择了介子。使用介子测试的方法是运行宁meson test
或ninja test
。现在的问题是我无法控制测试的位置 运行。
这种情况怎么测试?你如何测试你的 fcgi 脚本?
编辑: 这是我如何编译和测试的示例。这是一个完整的可验证示例:
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
class test : public Fastcgipp::Request<char>
{
bool response() {
nlohmann::json output;
out << "Content-Type: application/json; charset:utf-8\r\n\r\n";
out << "{\"success\": true}";
}
}
int main() {
Fastcgipp::Manager<test> manager;
manager.setupSignals();
manager.listen();
manager.start();
manager.join();
}
你可以认为响应为主。这是您开始处理事物的地方。您可以获取输入和输出以及所有这些好东西。
这就是我正在测试的方式:
TEST(test, test1) {
std::string fileName = "test.txt";
nlohmann::json input, output;
input["success"] = true;
std::system(std::string("curl -X GET \"localhost/cgi-bin/test.fcg\" > " + fileName).c_str());
std::ifstream file(fileName);
std::string out;
std::getline(file, out);
output = nlohmann::json::parse(out);
ASSERT_EQ(input, output);
std::system(std::string("rm " + fileName).c_str());
}
注: nlohmann::json是一个json解析器,我在test
中使用google测试The problem is now I do not control from where the test is run.
默认情况下测试是在构建目录中的 运行,但是可以使用参数 workdir(参见 reference)来设置 将用作测试工作目录的绝对路径,例如:
exe = executable(...)
wdir = join_paths(meson.current_source_dir(), 'some_dir')
test('basic', exe, workdir : wdir)
检查 meson object 其他可能的参考目录。