2017-03-01 13:09:57 su_buju 阅读数 423
  • PHP7自定义函数

    King老师精心打造的PHP7自定义函数课程,在PHP中提供了强大的系统函数来帮我们完成功能,但有时候只用系统函数往往还是不够的,还需要根据业务来封装自定义函数,本课程讲解了如何自定义函数,以及自定义函数中常见问题,是PHP入门必看课程。 山哥出品,必属精品!

    15668 人正在学习 去看看 何山

驱动函数:在测试被测函数时,一般需要在一个函数中构造一些实验数据作为传入被测函数的实参,然后再在该函数中调用被测函数,之后检测测试结果。这样的函数被称为驱动函数。

桩函数:在测试被测函数时,被测函数可能要调用一个未被实现功能的函数(或一连串函数的调用)。这时测试人员可以写一个临时的简单的函数来模拟被调函数的部分行为。这样的函数被称为桩函数。

2019-11-04 16:53:25 m0_37422931 阅读数 23
  • PHP7自定义函数

    King老师精心打造的PHP7自定义函数课程,在PHP中提供了强大的系统函数来帮我们完成功能,但有时候只用系统函数往往还是不够的,还需要根据业务来封装自定义函数,本课程讲解了如何自定义函数,以及自定义函数中常见问题,是PHP入门必看课程。 山哥出品,必属精品!

    15668 人正在学习 去看看 何山
4.1:函数的定义
函数是指一段实现某些功能的代码块,也叫子程序或方法。
在一个程序中如果重复使用某一个功能,可以将该功能定义成一个函数,再次使用时只需直接调用该函数即可。

作用:减少代码冗余

Python的函数以关键词def开头。关键词后时自定义的函数名,函数名后面添加英文格式的小括号,小括号里面可以根据情况来决定是否设置函数参数。
自定义的函数名,建议遵循驼峰命名法的命名规则,更容易在同行之间交流。
例:
函数名getName和get_name都是遵循驼峰命名法
函数getName设置参数name,并在函数代码中使用参数
def get_name():
    print('my name is Lili')

def getName(name):
    print('my name is ',name)
函数可以有参数也可以无参数。
如果函数带有参数,参数格式是可以任意的,如字符串、数字、元组、列表、或对象,均可作为函数参数。
格式:若一个函数含有多个参数,每个参数之间必须用英文逗号隔开
语法:
def 函数名(参数1,参数2,参数3):
    函数体
函数关键词def和函数体必须以缩进符进行划分,缩进在关键词def的代码都属于函数体。
有时候在函数执行某些处理时,如果想要得到函数的处理结果,可通过return将结果返回。
return时Python的内置函数,在自定义函数中使用return函数可以将所需要的数据或对象返回到函数外的程序

一个完整的函数定义主要有:关键词def、函数名、小括号、函数参数、函数体、返回值。

4.2:函数参数

函数是将程序的某部分功能进行封装,因此函数与函数外的程序之间是紧密相连的,两者之间需要数据传递,通过函数参数和函数返回值来实现
函数参数是由函数外的数据传递到函数里,在函数里可以对函数参数进行读写操作
例:
del myFunction(arg1,arg2,*args,**kargs):
    函数体

在函数参数的定义语法中,分别定义了4个参数arg1、arg2、*args、**kargs,
说明:
1.arg1和arg2是开发者自定义的参数名,在函数里,参数名可以当成变量使用
2.*args是将多个参数生成一个列表。在函数里可以把args当成一个列表来使用里面的参数。
3.**kargs将多个参数以字典的形式表示。在函数里通过字典的读取方式获取kargs里的参数

按照参数的类型划分,主要分为三种类型:自定义参数arg1或arg2、*args和**kargs
使用方法:
def get_name1(arg1,arg2):
    print('1、我们的名字分别为:',arg1,arg2)

def get_name2(*args):
    print('*args的数据格式是:',args)
    print('2、我们的名字分别是:',args[0],args[1])

def get_name3(**kwargs):
    print('**kwargs的数据格式是:',kwargs)
    print('3、我们的名字分别是:',kwargs['name1'],kwargs['name2'])
调用函数
get_name1('Luck','Tom')
get_name2('Lily','Mary')
get_name3(name1='LiLei',name2='Tony')
此外,参数的三种使用方式可以灵活地组合使用,在函数调用时,需要注意参数的传入顺序和传入方式。
例:
# 参数arg1和arg2的灵活使用
def get_name1(arg1,arg2='Lucy'):
    print('arg1和arg2的名字分别是:',arg1,arg2)
# 三种调用方式
get_name1('Tom')
get_name1('Tom','Lucy')
get_name1(arg2='Tom',arg1='Lucy')


def area(width, height):
    return width * height

def print_welcome(name):
    print("Welcome", name)
print_welcome("Fred")
w = 4
h = 5
area(w,h)
print("width =", w, " height =", h, " area =", area(w, h))
# 三种参数组合使用三种方式
# 例:
def get_name2(arg1,arg2,*args,**kwargs):
    print('arg1和arg2的名字分别是:',arg1,arg2)
    print('*args的名字分别是:',args[0],args[1])
    print('**kwargs的名字分别是:',kwargs['name'])
# 调用函数
get_name2('Lucy','Tom','Lily','Mary',name='Jack')
说明:
1.定义自定义参数时,除了定义参数名外还可以定义它的默认值,在调用函数时,如果没有对该参数传递数据,则返回参数值的默认值。
2.在函数外调用函数时,数据传递顺序可以自定义排序,传递过程中必须指定已定义的参数,get_name1(arg2='Tom',arg1='Lucy')。
3.三种函数参数组合使用时,参数定义顺序最好也按照上述例子。而且数据最好也依次传递,否则在定义和使用过程中都会提示错误信息。
4.3 函数的返回值

说明:函数与函数外的程序之间存在输入输出关系,将函数处理结果传递到函数外的程序,这个传递过程称之为函数的返回值
实现:由关键词return和yield实现
差异:return是在返回结果的同时中断函数的执行,yield则是返回结果并不中断函数的执行
理解:return比较容易理解,yield可以理解为‘轮转容器’,好比水车,首先yield可以装入数据、函数运行完毕后就会生成一个迭代器(generator object)
      并将迭代器返回到主程序中,迭代器是Python的特性之一。
      在主程序中,迭代器可以使用 next()来读取里面的数据,函数中使用yield好比水车转动后,车轮上的水槽装入水,随着轮子转动,一个个水槽就会装入水。
      在主程序中读取迭代器的数据好比一个个水槽把水送入水道中并流入田中。
例:
# 定义函数
def myReturn():
    for i in range(5):
        return i
# 定义函数
def myYield():
    for i in range(5):
        yield i
# 调用函数myReturn
result1 = myReturn()
print('return数据类型是:',type(result1))
print('这是return的数据:',result1)

# 调用函数yield
result2 = myYield()
print('yield数据类型是:',type(result2))
for i in result2:
    print('这是yield里面的数据:',i)
# 运行结果:
# return数据类型是: <class 'int'>
# # return数据类型是: 0
# # yield数据类型是: <class 'generator'>
# # 这是yield里面的数据: 0
# # 这是yield里面的数据: 1
# # 这是yield里面的数据: 2
# # 这是yield里面的数据: 3
# # 这是yield里面的数据: 4
从返回结果来看 result1和 result2, result1是一个数字类型的数据,数值为0,函数 myReturn在第一次循环时,关键词 return
将第一次循环的值返回到主程序,函数本身不在执行任何操作。
result2是一个 generator对象,这代表一个迭代器,通过for循环将迭代器里面的数据输出,数值从0到4,恰好是yield每次循环的数值
4.4:函数的调用
说明:函数的调用是指可以在函数里面调用其他函数,也可以在主程序里面调用函数。
调用方式:使用‘函数名+括号’,程序首先找到括号,认定当前语句代表函数调用,然后根据函数名去查找相应的函数并执行。
例:
def fun1():
    print('hi 我是fun1!')
def fun2(name):
    print('hi 我是fun2!,我的名字叫:',name,',我现在要呼喊fun2')
    # 调用函数fun1
    fun1()
def fun3(name):
    print('hi 我是fun3,我的名字叫:',name,',我现在要呼喊fun3')
    # 调用函数fun2
    fun2('Lily')
# 主程序
if __name__=='__main__':
    fun3('Lucy')

# 说明:代码if __name__=='__main__'下的代码是当前文件的主程序代码。当程序运行的时候,主程序首先调用并执行函数,fun3,
# 在fun3里面,它调用了fun2,而fun2调用了fun1,这样形成一个嵌套的函数调用。
# 执行结果:
# hi 我是fun3,我的名字叫: Lucy ,我现在要呼喊fun3
# hi 我是fun2!,我的名字叫: Lily ,我现在要呼喊fun2
# hi 我是fun1!
4.5 变量的作用域

变量的作用域分为全局变量和局部变量
在主程序中定义的变量是全局变量。在函数中定义的变量为局部变量
全局变量在所有作用域都可读,局部变量只能在本函数里可读,函数读取变量时,优先读取局部变量,然后再去读取全局变量。
函数里可以对变量使用关键词 global,使变量定义成全局变量。
例1:
def fun1():
    name = 'Lucy'
    print('hi 我是函数fun1,我的名字叫:',name)
if __name__== '__main__':
    name = 'Lily'
    fun1()
    print('hi 我是主程序,我的名字叫:',name)

例2:

# 函数fun1
def fun1():
    # 定义局部变量name
    funName = 'Lucy'
    # 定义全局变量
    global newName
    newName = 'Mary'
    print('hi 我是局部变量,我的名字叫:',funName)
    print('hi 我是全局变量,我在函数fun1里面,我的名字是:',name)
    print('hi 我是全局变量,由函数fun1定义,在函数里使用,我的名字叫:',newName)
# 主程序
if __name__=='__main__':
    # 定义全局变量name
    name = 'Lily'
    fun1()
    print('hi 我是主程序,我在主程序里面,我的名字叫:',name)
    print('hi 我是全局变量,由函数fun1定义,在主程序里面使用,我的名字叫:',newName)
# 说明:
# 上述代码中,函数fun1分别定义了局部变量funname和全局变量newName,主程序定义全局变量name,从代码输出结果看,
# 全局变量name和newName不限制使用范围,而局部变量funname只能在函数里使用
# 运行结果:
'''hi 我是局部变量,我的名字叫: Lucy
hi 我是全局变量,我在函数fun1里面,我的名字是: Lily
hi 我是全局变量,由函数fun1定义,在函数里使用,我的名字叫: Mary
hi 我是主程序,我在主程序里面,我的名字叫: Lily
hi 我是全局变量,由函数fun1定义,在主程序里面使用,我的名字叫: Mary'''

 

2013-07-23 16:50:31 bosbear 阅读数 903
  • PHP7自定义函数

    King老师精心打造的PHP7自定义函数课程,在PHP中提供了强大的系统函数来帮我们完成功能,但有时候只用系统函数往往还是不够的,还需要根据业务来封装自定义函数,本课程讲解了如何自定义函数,以及自定义函数中常见问题,是PHP入门必看课程。 山哥出品,必属精品!

    15668 人正在学习 去看看 何山

事务函数

  lr_end_sub_transaction/标记子事务的结束以便进行性能分析

  lr_end_transaction/标记LoadRunner事务的结束

  lr_end_transaction_instance/标记事务实例的结束以便进行性能分析

  lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并发送错误消息

  lr_get_trans_instance_duration/获取事务实例的持续时间(由它的句柄指定)

  lr_get_trans_instance_wasted_time/获取事务实例浪费的时间(由它的句柄指定)

  lr_get_transaction_duration/获取事务的持续时间(按事务的名称)

  lr_get_transaction_think_time/获取事务的思考时间(按事务的名称)

  lr_get_transaction_wasted_time/获取事务浪费的时间(按事务的名称)

  lr_resume_transaction/继续收集事务数据以便进行性能分析

  lr_resume_transaction_instance/继续收集事务实例数据以便进行性能分析

  lr_set_transaction_instance_status/设置事务实例的状态

  lr_set_transaction_status/设置打开事务的状态

  lr_set_transaction_status_by_name/设置事务的状态

  lr_start_sub_transaction/标记子事务的开始

  lr_start_transaction/标记事务的开始

  lr_start_transaction_instance/启动嵌套事务(由它的父事务的句柄指定)

  lr_stop_transaction/停止事务数据的收集

  lr_stop_transaction_instance/停止事务(由它的句柄指定)数据的收集

  lr_wasted_time/消除所有打开事务浪费的时间

  lr_end_sub_transaction/标记子事务的结束以便进行性能分析

  r_end_transaction/标记LoadRunner事务的结束

  lr_end_transaction_instance/标记事务实例的结束以便进行性能分析

  lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并


命令行分析函数

  lr_get_attrib_double/检索脚本命令行中使用的double类型变量

  lr_get_attrib_long/检索脚本命令行中使用的long类型变量

  lr_get_attrib_string/检索脚本命令行中使用的字符串


 信息性函数

  lr_user_data_point/记录用户定义的数据示例

  lr_whoami/将有关Vuser脚本的信息返回给Vuser脚本

  lr_get_host_name/返回执行Vuser脚本的主机名

  lr_get_master_host_name/返回运行LoadRunnerController的计算机名

2017-09-22 21:11:00 Xiao_CangTian 阅读数 62
  • PHP7自定义函数

    King老师精心打造的PHP7自定义函数课程,在PHP中提供了强大的系统函数来帮我们完成功能,但有时候只用系统函数往往还是不够的,还需要根据业务来封装自定义函数,本课程讲解了如何自定义函数,以及自定义函数中常见问题,是PHP入门必看课程。 山哥出品,必属精品!

    15668 人正在学习 去看看 何山

软件测试 —— 如何测试私有构造函数(反射机制)

要测试的类:

public class Argument {

    private final Value value;
    private final Variable variable;
    private final boolean isValue;

    private Argument(Value value, Variable variable, boolean isValue) {
        this.value = value;
        this.variable = variable;
        this.isValue = isValue;
    }

    public static Argument value(Value value) {
        return new Argument(value, null, true);
    }

    public static Argument variable(Variable variable) {
        return new Argument(null, variable, false);
    }

    public boolean isValue() {
        return this.isValue;
    }

    public boolean isVariable() {
        return !this.isValue;
    }

    public Value getValue() {
        return this.value;
    }

    public Variable getVariable() {
        return this.variable;
    }

    public String toString() {
        if (isValue)
            return value.toString();
        return variable.toString();
    }

}

测试用例(仅写一个测试)

  @Test
    public void testIsValue() throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Value v1 = new Value("Test01");
        Variable v2 = new Variable("Test02");
        
        Class clazz = Argument.class;
        //调用带参的、私有构造函数
        Constructor c1 = clazz.getDeclaredConstructor(new Class[]{Value.class, Variable.class, boolean.class});
        c1.setAccessible(true);    
        Argument t = (Argument) c1.newInstance(new Object[]{v1, v2, true});
t.value(v1); assertEquals(
true, t.isValue()); t.variable(v2); assertEquals(true, t.isValue()); }

 

posted @ 2017-09-22 21:11 douzujun 阅读(...) 评论(...) 编辑 收藏
2019-09-10 15:34:14 wangzhi44444 阅读数 69
  • PHP7自定义函数

    King老师精心打造的PHP7自定义函数课程,在PHP中提供了强大的系统函数来帮我们完成功能,但有时候只用系统函数往往还是不够的,还需要根据业务来封装自定义函数,本课程讲解了如何自定义函数,以及自定义函数中常见问题,是PHP入门必看课程。 山哥出品,必属精品!

    15668 人正在学习 去看看 何山

软件测试

软件测试分类

软件测试分类

按阶段划分

  • 单元测试
    • 单元测试又称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作。

单元的定义: C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单;
基本测试流程

  • 测试阶段
    • 编码后
  • 测试对象
    • 最小模块
  • 测试人员
    • 白盒测试工程师或者开发工程师
  • 测试依据
    • 代码和注释 + 详细的设计文档
  • 测试方法
    • 白盒测试
  • 测试内容
    • 模块接口测试
    • 局部数据结构测试
    • 路径测试
    • 错误处理测试
    • 边界测试
  • 集成测试

    • 集成测试又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增测试。重点测试不同模块的接口部分。
      基本测试流程
    • 测试阶段
      • 一般单元测试之后
    • 测试对象
      • 模块之间的接口
    • 测试人员
      • 白盒测试工程师或者开发工程师
    • 测试依据
      • 单元测试的模块 + 概要设计文档.
    • 测试方法
      • 黑盒测试与白盒测试相结合
  • 测试内容

    • 模块之间的数据传输
    • 模块之间的功能冲突
    • 模块组装功能正确性
    • 全局数据结构
    • 单模块缺陷对系统的影响.
  • 系统测试

    • 指的是将整个软件系统看成一个整体进行测试,包括对功能、性能以及软件所运行的软硬件环境进行测试
    • 系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。
  • 基本流程

    • 测试阶段
      • 集成测试之后
    • 测试对象
      • 整个系统
    • 测试人员
      • 黑盒测试工程师
    • 测试依据
      • 需求规格说明文档
    • 测试方法
      • 黑盒测试
    • 测试内容
      • 功能
      • 界面
      • 可靠性
      • 易用性
      • 性能
      • 兼容性
      • 安全性等.
  • 验收测试

    • 指按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。
    • 验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。阿旺总结验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。
  • 基本流程

    • 测试阶段
      • 系统测试通过之后
    • 测试对象
      • 整个系统(包括软件/硬件)
    • 测试人员
      • 主要是最终测试或者需求方
    • 测试依据
      • 用户需求和验收标准
    • 测试内容
      • 同系统测试(功能,各种文档等)

是否查看源代码划分

  • 又称数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只关心软件的输入数据输出数据
  • 黑盒测试可以发现如下几类错误
    • 功能不对或功能遗漏。
    • 界面错误。
    • 数据库访问或者处理错误。
    • 性能问题。
优点/缺点
  • 优点
    • 测试人员不需要了解实现得细节,包括特定的编程语言(没有编程经验的人也可以设计测试用例);
    • 测试人员和编程人员是相互独立的(黑盒测试用例设计与程序如何实现无关);
    • 从用户的角度进行测试,很容易被接受和理解;
    • 有助于暴露任何与规格不一致或者歧异的地方;
  • 缺点
    • 不能测试程序内部特定部位;
    • 如果程序未执行的代码无法发现;
    • 不可能做到穷举测试;
黑盒测试分类
  • 功能测试
    是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求
    • 逻辑功能测试(functiontesting)
    • 界面测试(UItesting)
    • 易用性测试(usability testing)
    • 安装测试(installationtesting)
    • 兼容性测试(compatibilitytesting)
  • 性能测试

    是软件测试的高端领域,性能测试工程师的待遇和白盒测试工程师不相上下,通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。

    • 时间性能(事务响应时间等)
    • 空间性能(系统资源消耗)
    • 一般性能测试
    • 稳定性测试
    • 负载测试
      • 通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况。
    • 压力测试
      • 通过确定一个系统的瓶颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别。

白盒测试(while0box testing)

  • 指的是把盒子打开,去研究里面的源代码和程序结构

灰盒测试

灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,既可保证黑盒的关注点又可掌控白盒的内部结构,但不会去对内部程序功能和运作做详细了解,灰盒测试结合了白盒测试和黑盒测试的要素

使用情况

在软件公司,往往采用黑盒测试&白盒测试相结合的方式;

  • 软件的整体功能和性能进行黑盒测试
  • 软件的源代码采用白盒测试

按是否运行分类

静态测试(static testing)

指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程.

  • 检查项
    • 代码风格和规则审查
    • 程序设计和结构审查
    • 业务逻辑审核
  • 表态质量
    • 功能性
    • 可用性
    • 可靠性
    • 有效性
    • 可维护性
    • 可移植性

动态测试(dynamic testing)

  • 是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程;
  • 动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。

按是否自动化划分

人工测试

  • 手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤
  • 执行效率慢,量大出错.

自动化测试

  • 就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。
  • 自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化。
  • 通常所说的自动化是指功能测试自动化;

回归测试

  • 是指软件被修改后重新进行的测试,重复执行上一个版本测试时的用例,是为了保证对软件所做的修改没有引入新的错误而重复进行的测试.

随机测试

随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分。另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试(Regressivetesting)一起进行。

冒烟测试

冒烟测试目的是确认软件基本功能正常,冒烟测试的执行者是版本编译人员。

探索性测试

探索性测试可以说是一种测试思维技术。它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。

  • 探索性测试自动化暂时无法代替。

软件测试

阅读数 533

没有更多推荐了,返回首页