searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

nginx集成cmocka单元测试

2024-11-13 09:32:08
1
0

单为了提高nginx自己编写的模块的质量,可以通过单元测试进行增强。

注意:这里示例的单元测试目录和nginx源码在同一级;

安装cmocka

去官网下载最新的源码,目前最新的是1.1.7版本

gunzip -d cmocka-1.1.7.tar.xz ; tar -xvf  cmocka-1.1.7.tar

cd cmocka-1.1.7

mkdir build; cd build ; cmake ; make install

依赖软件安装

yum install libxml2 libxslt cmake -y

编写测试用例

单元测试代码也是以nginx module的模式存在,所以需要单独创建一个目录用于存放单元测试代码。

mkdir tests;

创建config文件,内容如下,编译测试文件test.c

NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
    $ngx_addon_dir/test.c            \
    "
 
CORE_LIBS="$CORE_LIBS -lcmocka"

编写测试代码test.c

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>

#include <cmocka.h>

#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <setjmp.h>
#include <cmocka.h>

static void torture_string_equal(void **state)
{
    assert_string_equal("wurst", "wurst");
}

static void torture_string_not_equal(void **state)
{
    assert_string_not_equal("wurst", "brot");
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(torture_string_equal),
        cmocka_unit_test(torture_string_not_equal),
    };

    return cmocka_run_group_tests(tests, NULL, NULL);
}

 

编译测试用例

进入到nginx的源码工程中,将nginx.c里的main函数重命名为unittest_main_setup并在nginx.h中进行申明,之所以这么做是因为,单元测试编译后是一个

独立的二进制可执行文件,如果不把nginx.c里的main函数命名修改,将无法编译通过。

 

./configure     --add-module=../tests 
make;
mv objs/nginx  objs/test
 

运行测试用例

经过编译测试用例阶段,已在objs目录生成一个可执行测试用例文件test

./objs/test

 

 

0条评论
作者已关闭评论
陈****飞
4文章数
0粉丝数
陈****飞
4 文章 | 0 粉丝
陈****飞
4文章数
0粉丝数
陈****飞
4 文章 | 0 粉丝
原创

nginx集成cmocka单元测试

2024-11-13 09:32:08
1
0

单为了提高nginx自己编写的模块的质量,可以通过单元测试进行增强。

注意:这里示例的单元测试目录和nginx源码在同一级;

安装cmocka

去官网下载最新的源码,目前最新的是1.1.7版本

gunzip -d cmocka-1.1.7.tar.xz ; tar -xvf  cmocka-1.1.7.tar

cd cmocka-1.1.7

mkdir build; cd build ; cmake ; make install

依赖软件安装

yum install libxml2 libxslt cmake -y

编写测试用例

单元测试代码也是以nginx module的模式存在,所以需要单独创建一个目录用于存放单元测试代码。

mkdir tests;

创建config文件,内容如下,编译测试文件test.c

NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
    $ngx_addon_dir/test.c            \
    "
 
CORE_LIBS="$CORE_LIBS -lcmocka"

编写测试代码test.c

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>

#include <cmocka.h>

#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <setjmp.h>
#include <cmocka.h>

static void torture_string_equal(void **state)
{
    assert_string_equal("wurst", "wurst");
}

static void torture_string_not_equal(void **state)
{
    assert_string_not_equal("wurst", "brot");
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(torture_string_equal),
        cmocka_unit_test(torture_string_not_equal),
    };

    return cmocka_run_group_tests(tests, NULL, NULL);
}

 

编译测试用例

进入到nginx的源码工程中,将nginx.c里的main函数重命名为unittest_main_setup并在nginx.h中进行申明,之所以这么做是因为,单元测试编译后是一个

独立的二进制可执行文件,如果不把nginx.c里的main函数命名修改,将无法编译通过。

 

./configure     --add-module=../tests 
make;
mv objs/nginx  objs/test
 

运行测试用例

经过编译测试用例阶段,已在objs目录生成一个可执行测试用例文件test

./objs/test

 

 

文章来自个人专栏
大飞
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0