IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 嵌入式单元测试框架之Ceedling -> 正文阅读

[开发测试]嵌入式单元测试框架之Ceedling

Ceedling

Ceedling 是一个用 Ruby 语言编写的自动化测试框架,一个 C 项目构建系统,是对 Ruby Rake 的一个延申。Ceedling 主要目标是以测试为驱动的 C 语言开发,集成CMock、Unity、CException三个开源项目。

1.环境搭建

1.1 Ruby环境

Windows下,我们使用官方的RubyInstaller安装Ruby环境。RubyInstaller Archives Link <-----,选择合适的Ruby版本。

PS C:\Users\z004ccvf> Ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32]
PS C:\Users\z004ccvf> Ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32]

1.2 Ceedling安装

首先我们要知道 gem (类似于 python 的 pip 、Ubuntu 中的 apt-get 、Node.js 的 NPM 等等)是一个管理 Ruby 库和程序的标准包,通过 gem 可以十分便捷的安装、升级和卸载软件。
常见的 Ruby gem 指令:

CommandDescription
gem -vgem版本
gem -hhelp
gem install -hinstall帮助
gem update更新所有包
gem install -v PACKAGEVERSION安装指定版本的软件包
gem environment查看gem的环境

有了上面的知识储备,我们现在来安装 Ceedling
gem install Ceedling -v 0.30.0

1.3 GCC编译器

对于 Linux 操作系统,可能会自带 GCC 编译环境,但是Windows想要使用 GCC 编译器,一般需要安装 MINGW 或者 Cygwin 。
这里我们使用 MINGW 支持 GCC 编译。

2. Demo测试

2.1 生成一个 Sample 项目

ceedling example temp_sensor

2.2 项目测试

ceedling test:all

3. 创建myProject

3.1 ceedling基本使用

PS D:\Desktop\workspace\demo> ceedling
Welcome to Ceedling!
Commands:
  ceedling example PROJ_NAME [DEST]  # new specified example project (in DEST...
  ceedling examples                  # list available example projects
  ceedling help [COMMAND]            # Describe available commands or one spe...
  ceedling new PROJECT_NAME          # create a new ceedling project
  ceedling upgrade PROJECT_NAME      # upgrade ceedling for a project (not re...
  ceedling version                   # return the version of the tools installed

打开powershell或者cmd,执行ceedling,会得到上述所示提示。

CommandDescription
ceedling examples列出ceedling官方的examples
ceedling example exampleName下载example到当前文件路径
ceedling new PROJECT_NAME创建一个空的ceedling测试项目
ceedling versionceedling安装版本

3.2 ceedling new myProject

PS D:\Desktop\workspace> ceedling new myProject
Welcome to Ceedling!
      create  myProject/project.yml

Project 'myProject' created!
 - Execute 'ceedling help' from myProject to view available test & build tasks

3.2 进入workspace

PS D:\Desktop\workspace> cd .\myProject\
PS D:\Desktop\workspace\myProject> ls


    Directory: D:\Desktop\workspace\myProject


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        7/30/2021  10:51 AM                src
d-----        7/30/2021  10:51 AM                test
-a----        7/30/2021  10:51 AM           2516 project.yml

此时,我们为src和test文件分别书写一个main.c和test_main.c文件。

//main.c
void main(){
	printf("hello world!\n");
}
//test_main.c
void setUp(void)
{
}

void tearDown(void)
{
}

void testMain(){
	printf("succeed!\n");
}

3.3 “ceedling test:all” or “ceedling”

PS D:\Desktop\workspace\myProject> ceedling


Test 'test_main.c'
------------------
Generating runner for test_main.c...
Compiling test_main_runner.c...
Compiling test_main.c...
test/test_main.c: In function 'testMain':
test/test_main.c:10:2: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
  printf("succeed!\n");
  ^~~~~~
test/test_main.c:10:2: warning: incompatible implicit declaration of built-in function 'printf'
test/test_main.c:10:2: note: include '<stdio.h>' or provide a declaration of 'printf'
test/test_main.c:1:1:
+#include <stdio.h>
 void setUp(void)
test/test_main.c:10:2:
  printf("succeed!\n");
  ^~~~~~
Compiling unity.c...
Compiling cmock.c...
Linking test_main.out...
Running test_main.out...

-----------
TEST OUTPUT
-----------
[test_main.c]
  - "succeed!"

--------------------
OVERALL TEST SUMMARY
--------------------
TESTED:  1
PASSED:  1
FAILED:  0
IGNORED: 0

这样,你就实现了一个简单的ceedling测试项目了。

4. Ceedling使用gcovr测试代码覆盖

4.1 安装gcovr

这要求你的电脑现在拥有python环境
pip install gcovr
安装成功之后查看对应的version

C:\Users\z004ccvf>gcovr --version
gcovr 5.0
Copyright 2013-2018 the gcovr authors
Copyright 2013 Sandia Corporation
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.

4.2 ceedling new myProject_gcov

C:\Users\z004ccvf>ceedling new myProject_gcov
Welcome to Ceedling!
      create  myProject_gcov/project.yml

Project 'myProject_gcov' created!
 - Execute 'ceedling help' from myProject_gcov to view available test & build tasks

此时我们创建了一个空的ceedling项目,现在打开project.yml文件,使项目支持gcov代码覆盖检查。

:plugins:
  :load_paths:
    - "#{Ceedling.load_path}"
  :enabled:
    - stdout_pretty_tests_report
    - module_generator
    - gcov  #添加gcov功能

4.3 创建测试代码

在src和test文件,创建所需的测试函数和代码。

//test_myGcov.c
#include "myGcov.h"
void setUp(void)
{
}

void tearDown(void)
{
}
void testMyGCOV(){
	myGcov();
}
//myGcov.c
#include "myGcov.h"
void myGcov(){
	printf("this is myGcov!\n");
}
#include <stdio.h>
void myGcov();

然后执行ceedling gcov:all utils:gcov

C:\Users\z004ccvf\myProject_gcov>ceedling gcov:all utils:gcov


Test 'test_myGcov.c'
--------------------
Generating runner for test_myGcov.c...
Compiling test_myGcov_runner.c...
Compiling test_myGcov.c...
Linking test_myGcov.out...
Running test_myGcov.out...
Creating a gcov HTML report in 'build/artifacts/gcov'... Done in 0.926 seconds.

-----------------
GCOV: TEST OUTPUT
-----------------
[test_myGcov.c]
  - "this is myGcov!"

--------------------------
GCOV: OVERALL TEST SUMMARY
--------------------------
TESTED:  1
PASSED:  1
FAILED:  0
IGNORED: 0


---------------------------
GCOV: CODE COVERAGE SUMMARY
---------------------------
myGcov.c Lines executed:100.00% of 3
myGcov.c No branches
myGcov.c Calls executed:100.00% of 1

cd C:\Users\z004ccvf\myProject_gcov\build\artifacts\gcov
可以看见覆盖率测试报告,如下
result

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:56:13  更:2021-07-31 16:56:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:39:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码