C++析取器在代码自动化测试中的应用
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,stream这个类有两个重要的运算符:
1.插入器(<<)
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
2. 析取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
在C++编程项目中,代码完成后,往往需要花费大量的时间对写的模块代码进行测试,而测试的case往往不止一两个。模块代码进行更新后,通常还需要进行对所有case进行回归测试。为了能在模块代码修改后,快速地进行回归测试,一般会使用自动化脚本,一次将所有case都执行一遍。
为做到自动化测试的目的,一般情况下,我们可以将每个case的特征信息写在一个文件中,测试时程序读取文件内容并解析出case的特征信息;必要时,我们还需要将程序执行过程中部分结果打印到文件中,以备最后check这个case是否测试通过。
以下是一个实例,为测试一个模块代码,提取case的特征信息有type,地址和id。Stringstream t_ss作为中介,先将getline得到的case文件中的一行 插入到t_ss中,然后再将t_ss 通过析取器解析到各个变量中。直接使用in_stream来析取也可以,但要区分input 文件中的空白行就比较困难。如果input文件中有一个空白行,会导致上一行解析出来的内容打印两次。并且,需要注意,有的时候文件最后一行有空白行,用gvim打开却看不到空白行,这时候可以用vs code打开文件,出现空白行。
结果输出文件为output.csv。csv是一种表格文件,windows下可以用excel打开。输出到表格文件时,列的分隔符是逗号,写完第一行后加上<<endl,接下来将会从第二行第1列开始写。
如果output.csv文件不存在,则新建;如果存在,则覆盖写。如果不想覆盖写,想以追加的方式进行存储到文件中,需要这样打开csv文件out_fstream.open("xxx.csv",ios::app); 其中app是append的意思。
参考 http://www.cplusplus.com/reference/fstream/ofstream/open/
/*
Original 2020-03-21
README:This is a example to teach you use disjunctor to read a filewhich is usefull for testing a module automaticlyexecute: g++ -g -Wall -O0 main.cpp -o sim
*/#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(int argc, char** argv)
{std::ifstream in_stream ;std::ofstream out_stream;in_stream.open("input.txt");out_stream.open("output.csv"); //you can open *.csv with windows excelout_stream<<"type , addr, id" <<endl;// first line in excelchar type;unsigned int addr;unsigned int id;if(in_stream.fail()){cout<<"input.txt file is not exist "<<endl;return 1;}while( !in_stream.eof()){stringstream t_ss ;std::string t_string;std::getline(in_stream, t_string);t_ss << t_string ;if(t_string == "\0"){cout<<"blank line"<<endl;continue;}t_ss>>type >>std::hex >> addr >> std::dec >> id ; cout<<" type="<< type << " addr="<<hex<<addr << " id="<<id <<endl;// add your test function here// if use in_stream directly, can't distinguish the blank line in input file// in_stream>>type >>std::hex >> addr >> std::dec >> id ; out_stream << type <<","<<hex << addr <<","<<id <<endl;}return 0;
}
C++析取器在代码自动化测试中的应用相关推荐
- 在网页中插入播放器的代码
在网页中插入播放器的代码 插入Windows Media Player: ID:6BF52A52-394A-11d3-B153-00C04F79FAA6 插入real: <object id=& ...
- 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
文章目录 一.Android 平台代码调试器代码 二.Android.mk 构建脚本内容 三.Application.mk 构建脚本内容 四.正式编译 五.博客资源 一.Android 平台代码调试器 ...
- eclipse git 取远程代码_IDEA中的Git操作,看这一篇就够了!
大家在使用Git时,都会选择一种Git客户端,在IDEA中内置了这种客户端,可以让你不需要使用Git命令就可以方便地进行操作,本文将讲述IDEA中的一些常用Git操作. SpringBoot实战电商项 ...
- C语言求离散数学中析取合取等
从键盘输入两个命题变元P和Q的真值,求它们的合取.析取.蕴涵和等价四种运算的真值.要求对输入内容进行分析,如果不符合0.1条件需要重新输入,程序有良好的输入输出界面. 代码如下: #include&l ...
- java 实现自动生成部署文档_jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发......
jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开 1.配置JDK环境 1)jdk解压到此目录 [root@localhost src]# pwd /usr/lo ...
- 用Python构建网页抓取器
借助使用Python构建的尖端网页抓取技术,启动您的大数据项目 Scrape the Planet! Building Web Scrapers with Python 你会学到什么 如何理论化和开发 ...
- gcc 删除elf_ELF文件格式解析器 原理 + 代码
本文为看雪论坛精华文章 看雪论坛作者ID:菜鸟m号 附件链接:[原创] ELF文件格式解析器 原理 + 代码 写在前面: 读<Linux二进制>,发现作者对 ELF文件格式部分并没有做详细 ...
- python接口测试非json的断言_荐在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言...
之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...
- python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一
1. 知乎文章图片爬取器之一写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. ...
最新文章
- SpringMVC上传文件解析request请求为空获取不到数据问题
- C语言 一个字符常量占几个字节
- copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析
- Tensorflow2.x代码实现计算Top-k Accuracy
- c语言表达式10 6的结果,C语言表达式(++i)+(++i)+(++i)结果多少?
- 怎看沃科斯扫地机器人型号_科沃斯型号区别是什么?
- gSLICr: SLIC superpixels at over 250Hz
- linux xp双系统引导修复工具,XP和ubuntu双系统下如何修复XP引导菜单
- Hibernate的双向N-N关联(六)
- 使用 leastsq 对指定函数格式进行最小二乘拟合
- 浅谈VMD---变分模态分解
- Android pda出入库管理,仓库PDA扫描出入库管理系统
- linux下virtualbox安装win7虚拟机无法调整分辨率
- 如何批量修改抖音视频的分辨率
- nginx代理安装ssl证书
- oracle subsatr 分隔符,Oracle函数列表速查-数据库专栏,ORACLE
- 全民热议“10万彩礼结不了婚”的背后,百合网做了什么?
- 【微信小程序宝典】从零开始做微信小程序开发
- 显示器刷新率30hz_如何使您的120Hz或144Hz显示器使用其广告刷新率
- 史上最全网络通讯(IIOT、工业控制、5G、区块链)协议全景图
热门文章
- 物联网卡和流量卡相比哪个信号强
- 意想不到的前端三个小妙招
- allegro16.6使用汇总
- 中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制
- “21天好习惯”第一期-1
- 数据透视:Excel数据透视和Python数据透视
- 高洛峰mysql_【干货】MySQL 安装与安全优化
- Win7下python3.6.5 64bit安装配置图文教程
- 【编译原理复习】第六章---- 属性文法和语法制导翻译
- 【综合类型第 26 篇】WebStorm 2019.2.2 下载、安装教程