C++test手机在线网速测试QT

摘要: 为什么写这篇帖子 上周关鍵科技(Parasoft的代理)组织了一次C++test的公开课就报名了(值得一提的是报名参加培训的学员都给了15天的C++test的正版许可)。在这次培训中确实学到叻很多新的东西所以趁着C++test的许可还没过期,把培训中学到的东西分享给需要的同仁

上周关键科技(Parasoft的代理)组织了一次C++test的公开课,就報名了(值得一提的是报名参加培训的学员都给了15天的C++test的正版许可)在这次培训中确实学到了很多新的东西,所以趁着C++test的许可还没过期把培训中学到的东西分享给需要的同仁。

在这篇帖子中我将详细讲述我是用的开发环境和手机在线网速测试环境如何在Parasoft C++test中创建Qt的的手機在线网速测试工程,如何进行静态扫描如何进行单元手机在线网速测试,如何插桩以及一些使用C++test的小技巧。

这篇贴子中使用了什么環境

首先我们在安装完以上三个软件以后需要配置环境变量我的环境变量配置如下图所示。

搭建好环境创建一个带有Gui的Qt工程用于后边讲解然后在工程中添加新类MyClass并在MyClass中添加以下内容。

铺垫了这么多终于到c++test出场了~
首先点击新建工程创建手机在线网速测试工程。在前面我們生成了一个bdf文件这个bdf文件就是在这里用到的。选中"创建来自构建数据文件(bdf)的项目"点击下一步选择前面创建好的bdf文件直接完成。

箌目前为止我们是可以对项目进行静态扫描和生成单元手机在线网速测试用例的,但是执行单元手机在线网速测试会报错
如下面使用GJB8114規则进行代码规则静态扫描和生成单元手机在线网速测试用例。

控制台输出静态扫描结果(事实上在C++test中做的所有手机在线网速测试都会茬控制台中输出过程记录和结果,包括生成单元手机在线网速测试用例和执行单元手机在线网速测试控制台的输出在出现错误时可以帮助我们进行排查)。

在质量任务中可以查看静态扫描的结果

手机在线网速测试用例结果,我们可以在手机在线网速测试用例历览器中查看生成的手机在线网速测试用例结果

现在如果直接进行单元手机在线网速测试,在控制台窗口中可以看到一下错误信息显然是包含的頭文件以及类库没有找到,所以需要把对应的头文件和类库所在文件引入

再次打开Makefile.Debug文件,找到INCPATH和LIBS对应的内容之后到c++test中右键打开当前工程的属性,找到Parasoft->C++test->构建设置将INCPATH的内容(注意我这里复制出来的内容都是相对路径,要修改成绝对路径)复制到编译器选项将LIBS的内容复制到連接器选项

现在我们就可以正常进行单元手机在线网速测试了,我这里运行了一个MyClass::Add的手机在线网速测试用例执行过的语句背景色会变荿绿色。

在编写代码的时候难免会出现一个函数内调用另外一个函数的情况这种情况下做单元测的时候被调用的函数可能由于某些原因會出现一些不可控的情况。这种时候可以写一个桩函数替代原先的被调用的函数。
那么在c++test中怎么进行插桩呢这就是本小结中要讲述的問题。

然后在桩函数窗口中找到我们打桩的函数前面代码中,我们在Add函数中调用了getNewNum函数这里我们对getNewNum进行打桩,右键创建用户桩函数

給桩函数文件起个名字(注意,我们这创建的是c++工程所以文件名的后缀不要写成.c,亲测会插桩失败)创建号文件以后,到桩函数文件Φ将函数体中内容全部删掉,加入新的内容这里我直接让桩函数鸳鸯返回输入的数据return i。之后Add函数进行单元手机在线网速测试会自动使鼡桩函数替代原有的函数

最后在聊一聊在培训中学到的使用Parasoft的小技巧。

  • 将常用手机在线网速测试模板复制到用户自定义中
  • 编辑用户自定義中的模板
    在用户自定义中的模板是可以自己编辑的例如我比较习惯将Generate Unit Tests中生成选项卡下的手机在线网速测试套件中的手机在线网速测试套件输出文件和布局修改为”为每个手机在线网速测试的函数创建一个手机在线网速测试套件“。
  • 人工定义手机在线网速测试用例的输入輸出
    在手机在线网速测试用例浏览器中选中相应的手机在线网速测试套件右键新建数据源,编辑好数据源保存后再次在手机在线网速測试用例浏览器中相应的手机在线网速测试套件中右键创建新的手机在线网速测试用例,这里依旧以Add函数为例将参数中i和j以及输出中的int_return設置为表中对应的字段。

做完以上工作就可以运行自定义的手机在线网速测试用例了,我的手机在线网速测试结果就像下面这个样子

鉯上就是上周培训中学到的东西,如有不明白的欢迎留言交流如帖子中有错误的地方同样欢迎留言批评指正,在此谢过路过的各位大神

版权声明:本文内容由互联网用户自发贡献,版权归作者所有本社区不拥有所有权,也不承担相关法律责任如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:

进行举报并提供相关证据,一经查实本社区将立刻删除涉嫌侵权内容。

【云栖快讯】云栖专辑 | 阿裏开发者们的20个感悟一通百通  

作为C++优秀的图形界面编辑工具Qt(沒有之一)信号和槽是一个核心的机制,
笔者利用信号和槽写了一个简陋的小程序,希望能帮初学者了解信号和槽是怎么工作的
详见峩之前写过的一篇详细的文档
就有了如下自动生成的代码模版

注:这里的变大其实只是同按钮这个事件,出响应的反应(改变边框的范圍罢了)
说得专业点就是点击按钮,发出一个信号对应的槽函数就会做出响应的对策

三、代码和解释(很多代码都是自动生成的、注意注释中的代码就好了)

①头文件(按图片的顺序给代码)

②源文件(按图片的顺序给代码)

①借助 Qt 学习 C++ 的头文件、源文件、声明与定义 汾开的编程思维习惯,挺符合前沿知识的!
②在主窗口处声明一个子窗口对象主窗口就可以通过自定义的槽,任意操作子窗口
③而子窗ロ只能通过发送信号来操作主窗口

Lambda 表达式是在 C++11 中加入的 C++ 特性在这篇文章中我们将看到如何用 Lambda 表达式来简化 Qt 代码。Lambda 很强大但也要小心它带来的陷阱。

首先什么是 Labmda 表达式?

Lambda 表达式是在某个函数中直接定義的匿名函数它可以用于任何需要传递函数指针的地方。

Lambda 表达式的语法如下:

现在先忽略 “获取变量” 这部分下面是一个简单的 Lambda,用於递增一个数:

Lambda 表达式可以通过 “获取” 来使用当前作用域中的变量下面是用 Lambda 来对 vector 求和的一个示例。

你可以看到我们获取了本地变量 sum,所以可以在 Lambda 内部使用它sum 加了前缀 &,这表示我们通过引用获取 sum 变量:在 Lambda 内部sum 是一个引用,所以对它进行的任何改变都会对 Lambda 外部的 sum 变量慥成影响

如果你不是需要引用,只需要变量的拷贝只需要去掉 & 就好。

如果你想获取多个变量只需要用逗号进行分隔,就像函数的参數那样

目前还不能直接获取成员变量,但是你可以获取 this然后通过它访问当前对象的所有成员。

在背后Lambda 获取的变量会保存在一个隐藏嘚对象中。不过如果编译器确认 Lambda 不会在当前局部作用域之外使用,它就会进行优化直接使用局域变量。

有一个偷懒的办法可以获取所囿局部变量用 [&] 来获取它们的引用;用 [=] 来获取它们的拷贝。不过最好不要这样做因为引用变更的生命周期很可能短于 Lambda 的生命周期,这会導致奇怪的错误就算你获取的是一个变量的拷贝,但它本身是一个指针也会导致崩溃。如果明确的列出你依赖的变量会更容易避开這类陷阱。关于这个陷阱更多的信息请看看 “” 的第 31 条。

如果你在用 (你应该用因为有非常好的类型安全!),就可以在接收端使用 Lambda这對于较小的处理函数来说简直太棒了。

下面是一个电话括号器的示例用户可以输入数字然后拨出电话:

Lambda 也是  的一个非常好的替代方案。想像一下如果我们的拨号器现在是一组的数字按钮的数组。

没使用 Labmda 的代码在组合数字的时候会像这样:

不要忘了对象的生命周期!

在這个小例子中,有一个 Worker 实例来向 Monitor 实例报告进度到目前为止,还没什么问题

看起来没问题……但是这段代码会导致崩溃!

Qt 的连接系统很智能,如果发送方和接收方中的任何一个被删除掉它就会删除连接。在最初的 setMonitor() 中如果 monitor 被删除了,连接也会被删除但现在我们使用了 Lambda 來作为接收方: Qt 目前没有办法发现在 Lambda 中使用了 monitor。即使 monitor 被删除掉Lambda 仍然会调用,结果应用就会在尝试引用 monitor

为了避免崩溃发生你要向 connect() 调用传叺一个“context”参数,像这样:

这个上下文还会用于检测连接是否在队列中就像经典的 signal-slot 连接那样,如果上下文对象与发射信号的代码不在同┅个线程Qt 会将连接置入队列。

你可能对一种异步调用 slot 的方法比较熟悉它使用 。先定义一个类:

这段代码会工作但是:

这个效率会稍低一些,因为  QTimer::singleShot() 会在背后创建一个对象不过,只要你不是要在一秒内调用很多次这点性能损失可以忽略不计。显然利大于弊

你同样可鉯在 Lambda 前面指定一个上下文,这在多线程中非常有用但要小心:如果你使用低于 5.6.0 版本的 Qt,QTimer::singleShot() 有 在多线程中使用时会导致崩溃我们找到了那個困难的办法……

  • 连接 Qt 对象的时候使用 Lambda 比使用调度方法更好

希望你能喜欢这篇文章,并希望你现在就用漂亮的 Lambda 语法替换掉古板的旧语法!

我要回帖

更多关于 手机在线网速测试 的文章

 

随机推荐