26 | 代码贡献者的拦路虎:test::nginx 简介
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
OpenResty的测试体系中的核心是`test::nginx`,这是一个高门槛的测试框架,与一般的测试框架不同。它不基于断言,也不使用Lua语言。`test::nginx`的安装和示例,以及如何编写自己的测试案例都在文章中有所介绍。通过对参数和环境变量的控制,`test::nginx`可以实现乱序执行、多次重复、内存泄漏检测、压力测试等不同的效果。该测试框架的DSL提高了测试逻辑的清晰度和扩展性,但也提高了学习门槛。文章强调了`test::nginx`的重要性,指出它是OpenResty代码贡献者的拦路虎。文章内容深入浅出,适合读者快速了解OpenResty的测试体系及`test::nginx`的特点。 虽然`test::nginx`强大,但并不一定适合所有场景。在OpenResty中,读者也可以选择使用断言风格的测试框架`busted`。`busted`结合`resty`命令行工具,也可以满足不少测试的需求。最后,读者被鼓励在本地运行memcached的测试,并新增一个测试案例。欢迎读者记录操作和心得,分享给更多对OpenResty感兴趣的人,一起交流和探讨。 总之,本文介绍了OpenResty的测试体系及`test::nginx`的特点,同时提到了其他可选的测试框架`busted`,并鼓励读者参与测试案例的运行和分享。
《OpenResty 从入门到实战》,新⼈⾸单¥59
全部留言(11)
- 最新
- 精选
- K1最近开始学习Perl了,因为在复杂一点的测试案例中,需要在DATA前做一些事情,而又不得不使用perl;虽然已经抽象成数据驱动了,但是还是有很多细节涉及到perl语法,对于从未接触过perl的人来说,因为一些细节问题,会耽误很长时间。 test::nginx确实是门槛,是代码贡献者和二次开发者们的门槛。
作者回复: 嗯,perl 的语法真不是一般人能够适应的,需要一个明显的学习曲线
2019-07-241 - J.Smile./resty -e 'local memcached = require "resty.memcached" > local memc, err = memcached:new() > > memc:set_timeout(1000) > local ok, err = memc:connect("127.0.0.1", 11212) > local ok, err = memc:set("dog", 32) > if not ok then > ngx.say("failed to set dog: ", err) > return > end > > local res, flags, err = memc:get("dog") > ngx.say("dog: ", res)' -----执行结果是: failed to set dog: closed
作者回复: 你可以在这一行的后面判断下 err: local ok, err = memc:connect("127.0.0.1", 11212) 可能是 memcached 的服务没有启动。
2019-08-09 - HelloBug老师,DSL的翻译应该是领域专用语言?搜领域小语言没有搜到,搜到了这个DSL(Domain Specific Language)https://en.wikipedia.org/wiki/Domain-specific_language
作者回复: 是的,就是领域专用语言。之所以叫它小语言,是因为它不是通用的编程语言,只在特定领域内使用。
2019-07-27 - HelloBug问个可能很白痴的问题,如果环境里安装了好几个不同版本或者不同编译参数的nginx,怎么配置test::nginx使用指定的的nginx呢?在执行的时候,发现默认使用的是一个不支持stream的nginx,然后看prove 提供的参数也没有,感觉是在.t文件里指定,请老师指点一下~
作者回复: 是从系统的 PATH 里面查找 nginx 的路径的
2019-07-27 - 冰沁宇诺上面的案例,还有github文档中mysql 的例子中set_timeout通常都是设置成1秒,但是并发大的情况下经常会出现超时的情况,一般怎么评估自己工程中timeout应该设置成多少
作者回复: 这个是看具体的场景了,比如统计 MySQL 的日志,看看请求时间的分布情况。如果 MySQL 的慢查询比较多,很多超过 1 秒的,那这个时候更好的方案是去优化数据库。
2019-07-24 - 刘丹请问执行完git clone后,是否要执行以下命令来安装test::nginx? cd test-nginx perl Makefile.PL make sudo make install
作者回复: 并非如何,你可以参考一些开源项目的 travis 的做法: 1. 先通过包管理器安装: sudo cpanm --notest Test::Nginx >build.log 2>&1 || (cat build.log && exit 1) https://github.com/iresty/apisix/blob/master/.travis/linux_runner.sh#L20 2. git clone 最新的 test::nginx: https://github.com/iresty/apisix/blob/master/.travis/linux_runner.sh#L35 3. 用 prove 命令的时候,把 test nginx 的目录包含进去: prove -Itest-nginx/lib -r t
2019-07-24 - Geek_584aa7请问,怎么修改一些非nginx的标准配置呢?也是用config吗?2022-06-18
- 三叶虫tlb测试报错 Can't determine section names. Need two sections in first block at t/01-memd.t line 0. END failed--call queue aborted. # Looks like your test exited with 3 just after 3. 看了下报错提示和文档 改为:use Test::Nginx::Socket::Lua::Stream 'no_plan'; 或:use Test::Nginx::Socket::Lua::Stream tests => 3; 测试通过2021-04-08
- fangminyu老师 我一直有如下错误: prove -Itest-nginx/lib -r t/mem_server.t t/mem_server.t .. nginx: [alert] could not open error log file: open() "/usr/local/var/log/nginx/error.log" failed (13: Permission denied) t/mem_server.t .. 1/? Can't determine section names. Need two sections in first block at t/mem_server.t line 0. END failed--call queue aborted. # Looks like your test exited with 3 just after 3. t/mem_server.t .. Dubious, test returned 3 (wstat 768, 0x300) All 3 subtests passed Test Summary Report ------------------- t/mem_server.t (Wstat: 768 Tests: 3 Failed: 0) Non-zero exit status: 3 Files=1, Tests=3, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.12 cusr 0.04 csys = 0.19 CPU) Result: FAIL 请问如何解决?实在没办法了。。。。2020-02-20
- undefined#!/usr/bin/env bash export PATH=/usr/local/openresty/nginx/sbin/nginx:$PATH # 部分系统perl环境会提示(Can't locate t/.pm in @INC) export PERL5LIB=$(pwd):$PERL5LIB exec prove "$@"2020-01-07