Code Coverage tools of C/C++

Code Coverage is a measurement of how many lines, statements, or blocks of your code are tested using your suite of automated tests. It’s an essential metric to understand the quality of your QA efforts.

Read More

GitSCM clone code don't display branch

最近遇到一个 regression bug,是产品完成构建之后,build commit number 不对,显示的 HEAD 而不是常见的 97b34931ac HASH number,这是什么原因呢?
我检查了 build 脚本没有发现问题,branch 的输出是正确的,那我怀疑是引入 Jenkins 的原因,果然登录到远程的 agent 上去查看分支名称如下:

Read More

通过参数化上传文件到 FTP 服务器

实现 CI/CD 过程中,常常需要将构建好的 build 上传到一个公共的服务器,供测试、开发来获取最新的 build。如何上传 build 成果物到 FTP server,又不想把 FTP server登录的用户名和密码存在脚本里,想做这样的参数化如何实现呢?

upload_to_ftp.bat [hostname] [username] [password] [local_path] [remote_pat]

Read More

Automatically commit code by Jenkins

When we need to release a product, we should change copyright, build version, release month, release note…
How to modify multiple files automatically?

Read More

Jenkins Linux agent configuration

Prepare Java runtime

Check if had installed java

$ java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

Read More

从测试转开发

每当工作闲暇,我都会时常想起好久没有更新微信公众号的文章了,总想等工作不忙的时候赶紧跟大家分享我从测试转开发这段时间的经历和感受,但工作总是有忙不完的忙,一刻都停不下来。

终于等到这一周有两天工作不是那么忙碌了,才决定将前几天写到一半的文章更新完。这是我这几个月下来感受最轻松的两天,暂时没有bug需要去调查和测试,不用去看十几年的C代码,终于有大块时间去写我负责的Python Client端代码了。这种写着代码,听着歌曲去重构,Debug,修改Unit Test Suite感觉真是幸福。

幸福的时光总是短暂的,今天就又来了两个Bug需要去调查 ε=(´ο`*)))唉…

又把我打回原形,调查大半天之后发现原来是QA测的不对,可以松口气晚上可以不用工作更新下微信公众号了。

这五个月来,几乎每天都是白天八小时,晚上继续背着电脑回家准备继续工作,周日偶尔去公司,经常在家学习。因为角色的转变,新的项目,需要学习的地方很多。从业务到技术,再加上产品发布在即,作为一名开发新人也肩负起Bug Fix的任务,十年前的代码,全英文的文档,复杂的系统,如果不全力一搏,真担心自己转型失败,那就太打脸了。

一天的工作忙碌和压力,使得我晚上总是吃的停不下来,吃饭是我一天当中最轻松的时刻。去年我跟别人打赌减肥赢奖金,我毫无怨念的拿到了第一的奖金,可是今年再和别人打赌减肥,至今我都还没开始,马上年底了,输掉奖金是毫无悬念的。总结下来,大概是因为今年工作太忙,工作压力大的缘故,使得我无法在八小时之余安心去继续练习吉他,做keep,年假还没来得及休,真是计划不如变化快。

虽然我还是个小开发,当角色变了,角度也会有变化。

Read More

最受欢迎的 Python 自动化测试框架推荐

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间。

本文整理了当前最受欢迎的 Python 自动化测试框架。

Read More

如何做好功能测试

当你第一次开始接触测试这个行业的时候,首先听说的应该都是功能测试。

功能测试是通过一些测试手段来验证开发做出的代码是否符合产品需求。这些年功能测试好像不太受欢迎了,不少同学开始尝试自动化测试,测试开发等等,结果是功能测试、自动化测试、测试开发一样都没做好。

我们通常认为的功能测试是根据需求,采取以下测试流程:需求分析,用例编写,用例评审,提测验证,Bug回归验证,上线与线上回归等测试。如此日复一日,年复一年,可是等准备换工作的时候却得不到认可,你也遇到这种情况吗?

那么如何做好功能测试?功能测试用到哪些知识?有哪些相关的建议呢?

Read More

做了9年测试,我为何转开发?

最近几个月以来一直没有更新公众号文章,是因为五月开始,因为项目原因我有机会转为开发,我非常珍惜这一机会,所以一直在努力学习开发相关的技能。

做了9年测试,我为何转开发?

Read More

C-print

如何打印下面的字符?

$
<!-- more -->
##
$$$
###
$$$
##
$

示例 1:

int main()
{
char array[] = {'#', '$'};
for (int row = 1; row <= 7; row++) {
for (int hashNum = 1; hashNum <= 4 - abs(4 - row); hashNum++)
{
printf("%c", array[row % 2]);
}
printf("\n");
}
}

C - Score Input Sort Show

#include "stdafx.h"
#include <stdio.h>
#define N 5
//Score Input Sort Show
<!-- more -->
void input(double[]);
void sortAsc(double[]);
void sortDesc(double[]);
void show(double[]);

int main()
{
double scores[N];
input(scores);

printf("[SORT ASC]\n");
sortAsc(scores);
show(scores);

printf("[SORT DESC]\n");
sortDesc(scores);
show(scores);

return 0;
}

void input(double socres[])
{
int i;
for (i = 0; i < N; i++) {
printf("Please enter %d student's score: ", i+1);
scanf_s("%lf", &socres[i]);
}
}

void sortAsc(double socres[])
{
int i, j;
double temp;
for (i = 0; i < N - 1; i++)
{
{
for (j = 0; j < N - i - 1; j++)
{
if (socres[j] > socres[j + 1])
{
temp = socres[j];
socres[j] = socres[j + 1];
socres[j + 1] = temp;
}
}
}
}
}

void sortDesc(double socres[])
{
int i, j;
double temp;
for (i = 0; i < N - 1; i++)
{
{
for (j = 0; j < N - i - 1; j++)
{
if (socres[j] < socres[j + 1])
{
temp = socres[j];
socres[j] = socres[j + 1];
socres[j + 1] = temp;
}
}
}
}
}

void show(double scores[])
{
int i;
printf("********************************************\n");
printf("Chinese\tMath\tEnglish\tPhysics\tChemistry\t\n");

for (i = 0; i< N; i++)
{
printf("%.2lf\t", scores[i]);
}
printf("\n********************************************\n");
}

C-Language 计算图形的面积

#include "stdafx.h"
#include <stdio.h>

<!-- more -->
/*
计算图形的面积:
1. 圆的面积 = π * radius * radius
2. 矩形面积 = weight * height
3. 三角形面积 = 1/2 * weight * height
@author Xianpeng Shen
*/

double calcCircle(double);
double calcSquare(double, double);
double calcTriangle(double, double);
int validate(double);

int main()
{
int choice; // 用户选择
double area; // 图形面积
double radius; // 圆半径
double weight, height; // 图形的宽和高
printf("1. 圆\n2. 矩形\n3. 三角形\n");
printf("本系统支持三种图形面积计算,请选择:");
scanf_s("%d", &choice);
while (choice > 3 || choice < 1) {
printf("只能输入1~3整数,请重新输入:");
scanf_s("%d", &choice);
}

switch (choice)
{
case 1:
printf("请输入圆的半径:");
do
{
scanf_s("%lf", &radius);
if (!(validate(radius))) {
printf("不能为负数,请重新输入一个整数:");
}
} while (!validate(radius));
area = calcCircle(radius);
break;
case 2:
printf("请输入矩形的长和宽:");
do
{
scanf_s("%lf%lf", &weight, &height);
if (!validate(weight) || !validate(height)) {
printf("不能为负数,请重新输入两个正数:");
}
} while (!validate(weight) || !validate(height));
area = calcSquare(weight, height);
break;
case 3:
printf("请输入三角形的底和高:");
do
{
scanf_s("%lf%lf", &weight, &height);
if (!validate(weight) || !validate(height)) {
printf("不能为负数,请重新输入两个正数:");
}
} while (!validate(weight) || !validate(height));
area = calcTriangle(weight, height);
break;
default:
printf("只能输入1~3整数,请重新输入:");
break;
}
printf("图形面积为:%.2lf\n", area);
}

double calcCircle(double radius)
{
return 3.14 * radius * radius;
}

double calcSquare(double weight, double height)
{
return weight * height;
}

double calcTriangle(double weight, double height)
{
return weight * height / 2;
}

int validate(double num)
{
return num > 0; // 如果 num>0, 返回一个非零值,表示真。
}

C-Language 自定义函数

求次幂函数power

#include <stdio.h>

<!-- more -->
double power(double, int); // 形式参数

int main()
{
printf("%.2lf的%d次幂等于:%.2lf\n", 5.2, 2, power(5.2, 2)); //实际参数
return 0;
}

double power(double num1, int num2) // 形式参数
{
double result = 1;
int i;
for (i = 0; i < num2; i++)
{
result *= num1; // 累乘
}
return result;
}

我眼中的高级测试工程师

满足什么样的技术和经验才算高级工程师呢?说说我心中的高级工程师。

具有丰富的行业测试经验

最好有传统和互联网大公司工作经验,没有的话至少与这些公司的高级测试工程师有交流,了解他们是如何开展测试的,有助提高自己的眼界。

Read More