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}
测试结果截图如下:
相关推荐
【标题】"Erlang 学习笔记1" 在深入探讨Erlang这一强大的并发编程语言之前,我们先来理解一下Erlang的基本概念。Erlang是由瑞典电信设备制造商Ericsson开发的一种函数式编程语言,它最初设计的目的是为了处理分布式...
### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...
标题 "erlang port driver test" 指的是一个测试项目,这个项目专注于验证和测试 Erlang 的 Port Driver 功能。测试的目标可能是确保 Port Driver 能够正确地在 Linux 操作系统上运行,因为描述中提到 "can run on ...
这个 "erlang mochiweb-test demo" 压缩包很可能是为了展示如何使用 Mochiweb 在 Erlang 中构建一个简单的 Web 应用程序或测试环境。 Mochiweb 的核心组件包括以下几个部分: 1. **HTTP 服务器**:Mochiweb 提供了...
Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.
Stackless Python是一种Python的变体,它强调微线程(microthreads)的使用,提供更高效的并发执行。Stackless Python通过减少每个线程的堆栈大小来实现这一点,从而允许更多的线程同时运行。这在处理大量并发任务时...
通过这个"erlang nif test"项目,你可以深入理解Erlang NIF的工作原理,学习如何在Erlang和C之间进行高效的通信,以及如何在Erlang环境中编写和测试高性能代码。这是一个很好的实践平台,对于想要提升Erlang应用性能...
可以尝试用Erlang构建简单的聊天服务器、分布式任务调度系统或者数据库系统。 总的来说,Erlang的学习涉及函数式编程思想、并发处理、分布式系统设计等多个方面,深入学习并实践这些知识点,将使你具备开发高效、...
标题中的“erlang test 生成 dets”表明我们要讨论的是使用Erlang编程语言进行测试,并生成DETS(Disk-based Erlang Terms Storage)文件的过程。DETS是Erlang提供的一种持久化数据存储机制,类似于关系数据库的表,...
- **路径操作**: 使用`cd`命令改变当前工作目录,如:`1> cd("e:/erlang_src").` - **打印当前路径**: 使用`pwd()`函数可以打印当前的工作目录。 #### 7. 高级函数定义与操作 - **高阶函数**: Erlang支持创建高...
Erlang学习资料,2本书,不用卖书,电子书足够了
标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...
资源名称:Erlang语音学习资料汇总资源目录:【】Erlang程序设计【】[ManningPublications]ErlangandOTPinAction【】[NoStarchPress]LearnYouSomeErlangforGreatGood!ABeginner'sGuide【】[O'ReillyMedia]...
本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...
用于erlang学习资源 一些基本的语言
在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们分别代表了一个服务器进程和客户端进程,展示了Erlang中进程间的通信机制。 `server.erl` 文件通常包含一个持续运行的...
- **挑战与转折**:尽管AXD301项目取得了巨大成功,但1998年爱立信却禁止了Erlang在新项目中的使用,导致了Erlang团队成员出走,成立了Bluetail AB公司继续Erlang的研发工作。这一时期Erlang的发展受到了一定的阻碍...
分布式Erlang使用虚拟机(VM)的克隆,使得构建大规模分布式系统变得简单。 ### 7. 错误处理与恢复 Erlang采用“let it crash”哲学,鼓励程序在遇到错误时立即崩溃,而不是尝试恢复。这样可以快速暴露问题,便于...
### Erlang学习:支持多个连接的TableServer及进程通信详解 #### 一、引言 在Erlang的学习过程中,理解和掌握如何构建能够处理多个连接的服务器是非常重要的一步。本篇文档将详细介绍如何通过Erlang语言实现一个...