`

erlang学习笔记(common test简单使用)

 
阅读更多

erlang自带的common test框架用作测试比较方便,支持分布式测试等强大功能,个人感觉美中不足之处是把用例和测试库没有很好分离。当然可以自己封装测试库import使用,不过总觉得不够简洁。

下面记录一下基本使用方法,主要利用erlang强大的模式匹配

编写脚本basic/basic_SUITE.erl如下:

-module(basic_SUITE).
%%
%% highly recommended you add the line below which may
%% provide some macro
-include_lib("common_test/include/ct.hrl").
-export([all/0]).
-export([test1/1, test2/1, test_http/1]).

all() -> [test1,test2,test_http].

test1(_Config) ->
        1 = 1.

test2(_Config) ->
        A = 0,
        1/A.

test_http(_Config) ->
        inets:start(),
        {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} = httpc:request(get, {"http://api.dbank.com/rest.php", []}, [], []),
        io:format("~p~n",[Version]),
        io:format("~p~n",[ReasonPhrase]),
        io:format("~p~n",[Headers]),
        Body == "{\"error\":\"param error\"}".

编写demo/demo_SUITE.erl如下:

用例1,测试用例添加预置条件及回收处理函数

用例2,发起http请求测试结果

-module(demo_SUITE).
-include_lib("common_test/include/ct.hrl").

%% use export_all for test , or you must export functions by hand
-compile(export_all).
-export([all/0, init_per_testcase/2, end_per_testcase/2]).
-export([test_http/1,ets_tests/1]).

all() -> [test_http, ets_tests].

%%
%% ETS is an interface to the Erlang built-in term storage BIFs which
%% provide the ability to store very large quantities of data in an
%% Erlang runtime system
%%

%% call init_per_testcase before test_case
%% init only for ets_tests and ignore others
init_per_testcase(ets_tests, _Config) ->
        TabId = ets:new(account, [ordered_set, public]),
        ets:insert(TabId, {ciaos,25}),
        ets:insert(TabId, {stone,24}),
        [{table,TabId} | _Config];
init_per_testcase(_, _Config) ->
        %% ignore for all other cases.
        _Config.


%% call end_per_testcase after test_case
%%
end_per_testcase(ets_tests, _Config) ->
        ets:delete(?config(table, _Config));
end_per_testcase(_, _Config) ->
        ok.


%% test cases
ets_tests(_Config) ->
        TabId = ?config(table, _Config),
        [{ciaos,25}] = ets:lookup(TabId,ciaos),
        stone = ets:last(TabId),
        true = ets:insert(TabId, {tiger,50}),
        tiger = ets:last(TabId).


test_http(_Config) ->
        inets:start(),
        {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} = httpc:request(get, {"http://api.dbank.com/rest.php", []}, [], []),
        %%
        %% add some comment
        io:format("~p~n",[Version]),
        io:format("~p~n",[ReasonPhrase]),
        io:format("~p~n",[Headers]),
        Body == "{\"error\":\"param error\"}".

编写spec.spec配置文件如下(配置目录,输出结果以及跳过指定测试)

{alias, demo, "./demo/"}.
{alias, basic, "./basic/"}.
{logdir, "./logs/"}.

{suites, basic, all}.
{suites, demo, all}.
{skip_cases, basic, basic_SUITE, test2, "this test fails on purpose"}.

运行测试用例(用浏览器打开index.html会有更多的测试细节):

ciaos:~ # ct_run -spec spec.spec -suite basic/basic_SUITE.erl demo/demo_SUITE.erl
Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]



Common Test v1.7.1 starting (cwd is /root)

Eshell V5.10.1  (abort with ^G)
(ct@vm6245)1>
Common Test: Running make in test directories...
Recompile: demo_SUITE

CWD set to: "/root/logs/ct_run.ct@vm6245.2013-04-23_18.32.58"

TEST INFO: 2 test(s), 5 case(s) in 2 suite(s)

Testing penjin.basic: Starting test, 3 test cases
Testing penjin.basic: TEST COMPLETE, 2 ok, 0 failed, 1 skipped of 3 test cases

Testing penjin.demo: Starting test, 2 test cases
Testing penjin.demo: TEST COMPLETE, 2 ok, 0 failed of 2 test cases

Updating /root/penjin/logs/index.html... done
Updating /root/penjin/logs/all_runs.html... done

common test功能还很多,比如将测试用例分组搭配,指定顺序或者随机测试,指定某个测试用例失败后剩余用例是否继续测试等。

empty list / no option

shuffle

parallel

sequence

{repeat, Times}

测试结果截图如下:


 

  • 大小: 56 KB
分享到:
评论

相关推荐

    erlang 学习笔记1

    【标题】"Erlang 学习笔记1" 在深入探讨Erlang这一强大的并发编程语言之前,我们先来理解一下Erlang的基本概念。Erlang是由瑞典电信设备制造商Ericsson开发的一种函数式编程语言,它最初设计的目的是为了处理分布式...

    erlang学习笔记

    ### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...

    erlang port driver test

    标题 "erlang port driver test" 指的是一个测试项目,这个项目专注于验证和测试 Erlang 的 Port Driver 功能。测试的目标可能是确保 Port Driver 能够正确地在 Linux 操作系统上运行,因为描述中提到 "can run on ...

    erlang mochiweb-test demo

    这个 "erlang mochiweb-test demo" 压缩包很可能是为了展示如何使用 Mochiweb 在 Erlang 中构建一个简单的 Web 应用程序或测试环境。 Mochiweb 的核心组件包括以下几个部分: 1. **HTTP 服务器**:Mochiweb 提供了...

    erlang学习相关资料

    Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Stackless Python是一种Python的变体,它强调微线程(microthreads)的使用,提供更高效的并发执行。Stackless Python通过减少每个线程的堆栈大小来实现这一点,从而允许更多的线程同时运行。这在处理大量并发任务时...

    erlang nif test

    通过这个"erlang nif test"项目,你可以深入理解Erlang NIF的工作原理,学习如何在Erlang和C之间进行高效的通信,以及如何在Erlang环境中编写和测试高性能代码。这是一个很好的实践平台,对于想要提升Erlang应用性能...

    erlang学习资料

    可以尝试用Erlang构建简单的聊天服务器、分布式任务调度系统或者数据库系统。 总的来说,Erlang的学习涉及函数式编程思想、并发处理、分布式系统设计等多个方面,深入学习并实践这些知识点,将使你具备开发高效、...

    erlang test 生成 dets

    标题中的“erlang test 生成 dets”表明我们要讨论的是使用Erlang编程语言进行测试,并生成DETS(Disk-based Erlang Terms Storage)文件的过程。DETS是Erlang提供的一种持久化数据存储机制,类似于关系数据库的表,...

    erlang 笔记

    - **路径操作**: 使用`cd`命令改变当前工作目录,如:`1> cd("e:/erlang_src").` - **打印当前路径**: 使用`pwd()`函数可以打印当前的工作目录。 #### 7. 高级函数定义与操作 - **高阶函数**: Erlang支持创建高...

    Erlang学习资料

    Erlang学习资料,2本书,不用卖书,电子书足够了

    在erlang项目中使用protobuf例子

    标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...

    Erlang语音学习资料汇总

    资源名称:Erlang语音学习资料汇总资源目录:【】Erlang程序设计【】[ManningPublications]ErlangandOTPinAction【】[NoStarchPress]LearnYouSomeErlangforGreatGood!ABeginner'sGuide【】[O'ReillyMedia]...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    Erlang学习资源

    用于erlang学习资源 一些基本的语言

    erlang 连接学习例子

    在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们分别代表了一个服务器进程和客户端进程,展示了Erlang中进程间的通信机制。 `server.erl` 文件通常包含一个持续运行的...

    erlang入门学习经典资料(很不错)

    - **挑战与转折**:尽管AXD301项目取得了巨大成功,但1998年爱立信却禁止了Erlang在新项目中的使用,导致了Erlang团队成员出走,成立了Bluetail AB公司继续Erlang的研发工作。这一时期Erlang的发展受到了一定的阻碍...

    erlang编程 Introducing Erlang

    分布式Erlang使用虚拟机(VM)的克隆,使得构建大规模分布式系统变得简单。 ### 7. 错误处理与恢复 Erlang采用“let it crash”哲学,鼓励程序在遇到错误时立即崩溃,而不是尝试恢复。这样可以快速暴露问题,便于...

    erlang学习3pdf

    ### Erlang学习:支持多个连接的TableServer及进程通信详解 #### 一、引言 在Erlang的学习过程中,理解和掌握如何构建能够处理多个连接的服务器是非常重要的一步。本篇文档将详细介绍如何通过Erlang语言实现一个...

Global site tag (gtag.js) - Google Analytics