barriers / 阅读 / 详情

一篇文章搞懂unittest单元测试框架

2023-07-27 08:32:43
共1条回复
蓓蓓

码同学公众号:自动化软件测试

码同学抖音号:小码哥聊软件测试

Python 2.1及以后的版本,将 unittest 作为一个标准模块放入Python开发包中。

01 使用unittest编写测试用例

规则:

unittest的执行结果

02 三个重要概念

03 测试用例执行顺序

unittest默认按照 ASCII码 的顺序加载测试用例(包括测试目录和测试文件、测试类、测试方法),即 它并不是按照测试用例的创建顺序从上到下执行的。

discover() 和 main() 方法的执行顺序是一样的。故想让某个测试文件先执行,可以在命名上加以控制。

如何控制测试用例的执行顺序?

04 执行多个测试用例

unittest.defaultTestLoader.discover() 方法可以从多个文件中查找测试用例。

该类根据各种标准加载测试用例,并将它们返回给测试套件

如果想让 discover() 查找子目录下的测试文件,得将子目录标记为一个python模块(子目录下放 __init__.py 文件)

05 跳过测试和预期失败

执行结果:

以上四个装饰器同样适用于测试类。

06 Setup和Teardown

执行结果如下:

免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以 转发文章 + 私信「码同学666」获取资料哦

07 Web自动化测试

08

Parameterized

Parameterized 是python的一个参数化库,同时 支持unittest、pytest单元测试框架。

09

DDT

Data-Driven Tests 是 针对unittest单元测试框架 设计的扩展库。

安装:

导入:

使用规则:

执行报错如下时,是 因为文件名也为ddt:

10

数据文件的参数化

@file_data() 装饰器中内容为文件名称。支持 json格式 和 yaml格式 。

END

相关推荐

parameterized参数化测试

1、官网: https://pypi.org/project/parameterized/ 2、parameterized:可以使用任何Python测试框架进行参数化测试。比如nose的参数化测试,py.test的参数化测试,unittest的参数化测试。 3、安装parameterized:pip install parameterized 4、安装nose:pip install nose 5、安装pytest:pip install pytest 6、官网例子: 6.1、@parameterized 装饰符接受一个由tuples或param(...)组成的列表等: 6.2、@parameterized.expand 装饰符接受一个由tuples或param(...)组成的列表等,unittest仅支持这种@parameterized.expand 的用法,@parameterized.expand 可以用来在无法使用测试生成器的情况下生成测试方法(例如,当测试类是unittest.TestCase的子类时: 6.3、加法和乘法测试: 6.4、减法测试: 7、参数化参数 7.1、nose的参数化测试:nosetests -v test_math.py 7.2、py.test的参数化测试:py.test -v test_math.py() 7.3、unittest的参数化测试:python -m unittest -v test_math.py 8、兼容性:
2023-07-26 04:09:171

Parameterised是什么意思?

你的英文写错了吧?“Parameterized”是“参数化的”的意思。
2023-07-26 04:09:242

英语This project is parameterized怎么翻译?

This project is parameterized这个项目是参数化的
2023-07-26 04:09:328

参数化查询的介绍

参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。
2023-07-26 04:09:531

Syntax error, parameterized types are only available if source level is 1.5

The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class filesSyntax error, parameterized types are only available if source level is 1.5Missing artifact com.sun:tools:jar 1.5.0 终极解决方法解决办法二:首先,查看错误列表windows->Show View->Problems,在有以上问题的同时,还会出现该错误。The container "Maven Dependencies" references non existing library "C:Documents and SettingsDELL.m2 epositorycomsun ools1.5.0 ools-1.5.0.jar"大致说:找不到该tools-1.5.0.jar。所以将C:Program FilesJavajdk1.6.0_10lib目录下的tools.jar拷贝到C:Documents and SettingsDELL.m2 epositorycomsun ools1.5.0目录下,并将tools.jar改名为tools-1.5.0.jar,并在pom.xml中作如下配置:<dependency><groupId>com.sun</groupId><artifactId>tools</artifactId><version>1.5.0</version></dependency>即可!导入新项目 没有.classpath文件和 .project文件、导致没有 path builder
2023-07-26 04:10:063

junit是不是不支持传入参数

1.更改默认的测试运行器为RunWith(Parameterized.class)2.声明变量来存放预期值 和结果值3.声明一个返回值 为Collection的公共静态方法,并使用@Parameters进行修饰4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值[java] view plain copy package com.cyt; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters;
2023-07-26 04:10:141

new ThreadStart中的方法如果有参数,该怎么写

Thread calcThread = new Thread(new ParameterizedThreadStart(RunAlg));calcThread.Start("参数");做个简单的解释,因为我看之前的答案,都不知道传递的参数是哪个函数参数类型必须定义为object :如:RunAlg(object nParam);参数用的时候需要类型转换,如转int: (int)nParam; 转string :nParam.toString();多个参数可以做成类或者数组传入。
2023-07-26 04:10:242

实体造型的概念

1、扫掠(Sweeping)把一个元素沿着一条路径"扫出"的一个立体特征叫做面特征。这些体积要么加到物体上("拉伸(extrusion)")要么切除材料("切割路径(cutter path)"). 也叫做"基于草图的造型(sketcher based modelling)". 和各种制造技术类似,例如挤压(extrusion),铣(milling),车削(lathe)等等。2、边界表示(Boundary representation)一个立体可以用其边界表面表达,然后填充成为实体. 也成为"曲面造型surfacing"。 和各种制造技术类似;注模(Injection moulding),铸造(casting),锻造(forging),热塑加工(thermoforming),等等。3、参数化体素(也称基元)实例化Parameterized primitive instancing.从一个参数化的体素库中挑出并指定参数得到一个物体 例如,螺栓在库中有一个模型,通过修改它的参数集合这个模型可以用于所有螺栓的尺寸4、空间占领(Spatial occupancy,或空间枚举)整个空间子分成规则块(cell,或细胞,胞腔),物体通过指定它占据了那些块来表示。 这样表示的物体可用于有限差分析,这通常是在模型完成之后作的,作为分析软件的预处理的一部分。5、分解Decomposition和"空间占据"类似,但是块可以不规则,也不用"预编织".这样表示的模型可以用于有限元分析这通常是在模型完成之后作的,作为分析软件的预处理的一部分。6、构造实体几何(Constructive solid geometry).用象并,差,交这样的布尔操作把简单的物体组合起来,通常有树形的等级结构(组合体可以再组合)。7、基于特征的造型(Feature based modelling)物体和操作的复杂组合可以作为一个单元一起修改和复制,操作的顺序存储在一个树状结构(boolean tree or feature tree)中,参数的改变可以在树中传播(propagate)。8、参数化造型(Parameteric modelling)特征的属性被参数化,并给予标签(变量名)而不仅是固定的数字尺寸,整个模型的参数间的关系也记录下来,使得参数值的改变变得更简单。 几乎总是和特征联合使用,称为基于特征的参数化造型系统。
2023-07-26 04:10:311

Collection is a raw type. References to generic type Collection should be parameterized为什么

把minsdkversion改为14;clean一下工程试一试
2023-07-26 04:10:443

Task 传匿名委托时,怎么使用参数才正确

static void Main(string[] args){for (int i = 0; i < 100; i++){Task.Factory.StartNew((f)=> {Console.WriteLine(f);//自己执行的操作},i);}Console.ReadKey();}本例子只是做一个输出,自己的操作替换掉就可以,虽然回答的有点晚,希望可以帮到其他的人。
2023-07-26 04:11:032

The type List is not generic; it cannot be parameterized with arguments

您好,很高兴为您解答。你看看你导入的包是不是正确,应该导入的是import java.util.List。如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】希望我的回答对您有所帮助,望采纳! ~ O(∩_∩)O~
2023-07-26 04:11:103

TestNG.xml配置,同一个方法同一个参数,传递多个不同的值,该如何写代码?

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"><test name="test12"><classes><class name="TankLearn2.Learn.ParameterizedTest1" ><methods><parameter name="test1" value="Tank" /><include name="ParaTest"></methods><methods><parameter name="test1" value="Xiao" /><include name="ParaTest"></methods></class></classes></test></suite>拿分来吧。
2023-07-26 04:11:182

List is a raw type. References to generic type List should be parameterized

没有对List这个接口进行泛型参数化,你进行泛型参数化就可以了!如 List<String> lis=new List<String>()
2023-07-26 04:11:251

java错误:The type ArrayList is not generic; it cannot be parameterized with arguments

类名换下,ArrayList不能用
2023-07-26 04:11:334

java中定义Map 报错 求解!!!!!!!!!!

应该这样写:protected Map getKeyMethodMap(){Map<String,Object> map = new HashMap<String,Object>();map.put("login","adminLogin");return map;}Map<?,?>这里面的对象要看你自己的需求填写。
2023-07-26 04:11:445

下面在MyEclipse里的警告是什么意思?

这个表示ArrayList初始化的时候最好加上你存储的数据类型,因为AyyayList存储时采用了java泛型这个概念,举个例子,你想在ArrayList中存储String类型,那么初始化的时候应该写成ArrayList<String> temp = new ArrayList<String>(); 不过一般建议采用接口和子类继承方式初始化,即List<String> temp = new ArrayList<String>();
2023-07-26 04:12:001

在MyEclipse里ArrayList总是出现警告,下面提示是什么意思啊?

这个表示ArrayList初始化的时候最好加上你存储的数据类型,因为AyyayList存储时采用了java泛型这个概念,举个例子,你想在ArrayList中存储String类型,那么初始化的时候应该写成ArrayList<String> temp = new ArrayList<String>(); 不过一般建议采用接口和子类继承方式初始化,即List<String> temp = new ArrayList<String>();
2023-07-26 04:12:152

“DoWork”的重载均与委托“System.Threading.ParameterizedThreadStart”不匹配

DoWork的方法的参数个数,以及类型(也就是函数签名)和ParameterizedThreadStart委托的类型不一致,DoWork要声明为以下的东东void DoWork(object data)还有,ThreadArray[i].Start((object)i); i不用强制转换为object你可以直接ThreadArray[i].Start(i);
2023-07-26 04:12:221

Syntax error, parameterized types are only available if source level is 1.5 or greater

这个错误提示是语法错误,检查一下最可能出现语法错误的地方
2023-07-26 04:12:411

一个jenkins远程操作另一个jenkins进行构建

有时候我们需要在一台服务器的jenkins上远程操作另一台服务器的jenkins进行构建 需求的背景:公司jenkins服务器是一台windows电脑(A),不能进行flutter项目的iOS项目部分的打包,所以在另一台windows电脑(B)上装了macOS虚拟机,并安装jenkins进行自动化打包,最后实现让A的jenkins远程控制B的jenkins进行打包 具体的做法: 1、A和B的jenkins都需要安装插件Parameterized Remote Trigger Plugin 2、配置 B:任务配置 ①新建任务-freestyle,名称例如witParkingIOS,选择参数化构建过程(This project is parameterized),继续选择字符参数(String Parameter) 名称随便起一个,例如BUILDKEYSFORIOS 默认值随便填,例如123ios456 描述随便 ②构建触发器-触发远程构建 身份验证令牌随便填,例如123456 ③系统管理-系统配置-Jenkins URL 设置本机ip+8080即可,例如http://100.100.100.100:8080/,这里可以让同事用别的电脑访问此地址,能够访问你的jenkins即可 A:任务配置 ①系统管理-系统配置-Parameterized Remote Trigger Configuration Display name填上文的BUILDKEYSFORIOS Authentication选择Token Authentication User Name填jenkins账号名 API Token填上文的身份验证令牌123456 Remote Jenkins URL填上文的Jenkins URL ②新建任务-freestyle,构建中选择Trigger a remote parameterized job,select a remote host这里可以选择到第一步配置的BUILDKEYSFORIOS Job Info的Remoter Job Name or URL这里,填B的jenkins的对应任务的名称witParkingIOS Token填上文的身份验证令牌123456 Parameters填BUILDKEYSFORIOS=123ios456 这样A的任务点击立即构建,即可自动调用B的abc任务构建
2023-07-26 04:12:481

java的一个问题,求解决……

public final class String implements Serializable, Comparable<String>, CharSequence
2023-07-26 04:12:573

仿真技术在光纤通信实验教学中的应用论文

仿真技术在光纤通信实验教学中的应用论文   摘要:本文将Optisystem和Matlab联合仿真技术引入光纤通信实验教学,学生通过虚拟仿真技术,更清晰直观地进行实验,并且节省硬件设备投资,取得良好的教学效果。   关键词:仿真技术光纤通信实验技术应用   随着通信技术的迅猛发展,光纤通信作为通信专业的一门重要必修课程,在培养通信人才能力的角色中扮演着越来越重要的作用[1]。光纤通信是一门物理学和通信学的交叉学科,其中涉及很多物理学和通信学科的基础理论和基础知识,这给学生学习掌握好这门课程带来很大的挑战。   光纤通信作为一门工程学科,不仅仅教授理论内容,其实践内容也占有非常重要的地位。由于资金的限制,电信级的设备无法购入,因此光纤通信实验课基本以试验箱为主,再配合其他测试仪器完成实验教学,这种模式存在诸多问题,比如实验设备具有使用寿命、易老化;实验项目方法单一、缺乏灵活性;很难进行综合性开发、二次开发;难以深入了解其内部工作原理等。随着计算机仿真技术的发展,国内外高校越来越重视该技术在实验教学中的应用,目前各大高校已经陆续开始建设虚拟仿真实验室。本文将Optisystem和Matlab联合仿真技术引入光纤通信实验教学中,不仅克服了传统实验教学的弊端,还带来了实验开设的便利性、重复性、精准性等优势,取得了良好的教学效果。    1。Optisystem仿真系统   Optisystem是加拿大Optiwave公司推出的一款计算机仿真系统[2],主要用于光纤通信系统的器件仿真、系统设计等。Optisystem提供了良好的可扩展性,可与Matlab进行联合仿真,只需要在仿真系统中添加一个Matlab组件即可,使用起来方便简单[3]。在使用Optisystem与Matlab协同仿真的时候,首先要了解Optisystem的信号输入Matlab工作空间的格式。   其数据格式如图1所示。   图1Matlab空间数据格式   由图1(a)可以看出,Optisystem的信号格式包括“TypeSignal”,字符类型,表示该信号的类型为光信号、电信号或二进制信号;“Sampled”,结构体,Optisystem的信号就包含在该字段当中。“Parameterized”,结构体,参数化字段,表示一些与时间平均有关的量,如平均功率、中心波长、偏振态等;“Noise”,结构体,表示噪声数据;“Channels”,表示该信号的波长,是指中心波长。   如果选择的是频率抽样信号,则Sampled的数据格式如图1(b)所示。如果选择的是时间抽样信号,则Sampled的数据格式如图1(c)所示。到底是时间信号还是频率信号,由具体问题决定。使用Matlab在时域对信号处理时,就选择时域抽样,否则,选择频域抽样。由图1(b)、图1(c)看出,Smapled包含两个字段,一个是Signal字段,该字段是信号在抽样点的值,另一个是Frequency或Time字段,该字段是抽样点的频点或时间点。    2。频域的Optisystem与Matlab联合仿真   为了进一步说明Optisystem与Matlab联合仿真技术在光纤通信实验教学中的应用,用以下例子做说明。本部分是频域的联合仿真,第3部分是时域的联合仿真。在本部分的例子中,我们使用Matlab代码,对连续波激光器的输出光谱进行右移1THz的操作。其搭建的Optisystem系统如图2所示。   图2光谱右移Optisystem系统   图2中,连续波激光器发出的激光,输入Matlab组件,使用Matlab组件对其进行频移操作。注意:需要把Matlab组件中的“Sampledsignaldomain”设置为“Frequency”,表示在频域采集信号。把Matlab组件中的“RunCommand”设置为Matlab脚本的名字。以下是编写的Matlab脚本代码,名字为frequench_shift。m   OutputPort1=InputPort1;   f=InputPort1。Sampled。Frequency;%输入光信号的频谱   OutputPort1。Sampled。Frequency=f+1e+12;%输出光谱频率右移1THz   使用光谱仪分别测试连续波激光器的输出光谱和经过Matlab组件处理过后的光谱,分别如图3(a)和(b)所示。   (a)(b)   图3(a)连续波激光器光谱;(b)Matlab组件输出光谱   通过比较图3(a)和(b)可以看出,连续波激光器的输出光谱中心频率位于193。1THz处,而Matlab组件的输出光谱位于194。1THz处,这说明光谱被Matlab组件右移了1THz。仅仅使用了三行Matlab代码即实现了频移操作,非常简洁方便有效。    3。时域的Optisystem与Matlab联合仿真   在时域的Optisystem与Matlab联合仿真中,以光信号的幅度调制为例。搭建的Optisystem系统如图4所示。   图4Matlab实现的光信号幅度调制   在图4中,连续波激光器输出的光信号和调制信号输入Matlab组件,Matlab组件完成对信号的光幅度调制。搭建Matlab组件时,需要设置两个输入端口,其中一个电端口,一个光端口。调制信号采用1Gbit/s的伪随机序列,使用NRZ模块产生1Gbit/s的NRZ格式的伪随机序列。把伪随机序列和连续波激光器输出的"光信号同时输入Matlab组件,用来产生幅度调制光信号。对于光信号的幅度调制,其数学表达式为:   Eout(t)=Ein(t)。[modulation(t)]1/2   其中Eout(t)是输出的光幅度调制信号,Ein(t)是输入的连续波光信号,modulation(t)是调制电信号。   Matlab脚本代码如下,名字为am。m   OutputPort1=InputPort1;   [is,cs]=size(InputPort1。Sampled);   len=length(InputPort1。Sampled);   forcounter=1:cs   OutputPort1。Sampled(1,counter)。Signal=。。。   InputPort1。Sampled(1,counter)。Signal。*。。。   sqrt(InputPort2。Sampled(1,counter)。Signal);   end   (a)(b)   图5(a)伪随机序列时域波形;(b)光幅度调制时域波形   运行Optisystem系统,进行仿真,仿真结束,使用电域示波器(OscilloscopeVisualizer)观测1Gbit/s的伪随机序列NRZ码时域波形。使用光域示波器(OpticalTimeDomainVisualizer)观测Matlab组件的输出时域波形,如图5所示。   其中图5(a)是伪随机序列的时域波形,图5(b)是经过Matlab处理之后的光幅度调制时域波形。通过对比图5(a)和(b)可以知道,使用Matlab组件实现的幅度调制器,能够正常地把伪随机序列码调制到光波上,从而实现数字光信号的幅度调制。    4。结语   本文以Optisystem和Matlab联合仿真为例,介绍了仿真技术在光纤通信实验教学中的应用。通过频域联合仿真和时域联合仿真两个实例,分析了在Optisystem中如何使用Matlab组件进行联合仿真。使用联合仿真技术,可以大大拓展Optisystem的使用范围,学生通过使用仿真技术,不仅能够把课堂上学习的理论知识应用于实践,知其然也知其所以然,还能够巩固学习效果,提高能力,为培养应用型人才打下良好的基础。    参考文献:   [1]王秋光,张亚林,胡彩云,赵莹琦。 OptiSystem仿真在光纤通信实验教学中的应用[J]。实验室科学,2015(2)。   [2]韩力,李莉,卢杰。基于Optisystem的单模光纤WDM系统性能仿真[J]。大学物理实验,2015(10)。   [3]赵赞善,罗友宏,谢娇。 Optisystem中Matlab Component模块的扩展应用[J]。电信技术,2012(12)。 ;
2023-07-26 04:13:041

软件测试里如何在LoadRunner脚本中做关联

LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用 LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。教你在软件测试里如何在 LoadRunner 脚本中做关联 (Correlation)当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。何谓关联(correlation)?所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。下面的图示说明了这样的情形:当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了。哪些错误代表着我应该做关联(correlation)?假如脚本需要关联(correlation),在还没做之前是不会执行通过的,也就是说会有错误讯息发生。不过,很不幸地,并没有任何特定的错误讯息是和关联(correlation)有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。要如何做关联(correlation)?关联(correlation)函数关联(correlation)会用到下列的函数:? web_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。语法:web_reg_save_param ( “Parameter Name” ,list of Attributes , LAST );? web_create_html_param、web_create_html_param_ex:这二个函数主要是保留作为向前兼容的目的的。建议使用 web_reg_save_param 函数。详细用法请参考使用手册。在VuGen中点选【Help】【Function reference】【Contexts】【Web and Wireless Vuser Functions】【Correlation Functions】。如何找出要关联(correlation)数据简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。VuGen提供二种方式帮助您找出需要做关联(correlation)的值:1. 自动关联2. 手动关联自动关联VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。自动关联提供下列二种机制:? Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。规则来源有两种:o 内建(Built-in Correlation):VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联规则。您可以在【Recording Options】【Internet Protocol】【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。您也可以在【Recording Options】【Internet Protocol】【Correlation】检视每个关联规则的定义。o 使用者自订(User-defined Rules Correlation):除了内建的关联规则之外,使用者也可以自订关联规则。您可以在【Recording Options】【Internet Protocol】【Correlation】建立新的关联规则。? Correlation Studio:有别于Rules Correlation,Correlation Studio则是在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。Rule Correlation请依照以下步骤使用Rule Correlation:1. 启用auto-correlation1. 点选VuGen的【Tools】【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】【Correlation】,勾选【Enable correlation during recording】,以启用自动关联。2. 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。3. 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。4. 设定当VuGen侦测到符合关联规则的数据时,要如何处理:§ 【Issue a pop-up message and let me decide online】:跳出一个讯息对话窗口,询问您是否要建立关联。§ 【Perform correlation in sceipt】:直接自动建立关联2. 录制脚本开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为BroadVision应用系统建立关联的例子,在脚本批注部分可以看到关联前的数据为何。3. 执行脚本验证关联是OK的。Correlation Studio当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。使用Correlation Studio的步骤如下:1. 录制脚本并执行2. 执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。3. 扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。4. 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。5. 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。手动关联手动关联的执行过程大致如下:1. 使用相同的业务流程与数据,录制二份脚本2. 使用WinDiff工具协助找出需要关联的数据3. 使用web_reg_save_param函数手动建立关联4. 将脚本中有用到关联的数据,以参数取代接下来将详细的说明如何执行每个步骤使用相同的业务流程与数据,录制二份脚本1. 先录制一份脚本并存档。2. 依照相同的操作步骤与数据录制第二份脚本并存盘。注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。有时候会遇到真的无法使用相同的输入数据,那您也要记住您使用的输入数据,到时才能判断是您输入的数据,还是变动的数据。使用WinDiff工具协助找出需要关联的数据1. 在第二份脚本中,点选VuGen的【Tools】【Compare with Vuser】,并选择第一份脚本。2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】【View】【Show Inline Differences】)。3. 逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。选取差异的脚本,然后复制。在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。注意:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间。4. 接着要在Recording Log(单一protocol)或是Generation Log(多重protocol)中找这个值。将鼠标光标点到Recording Log的第一行开头,按下Ctrl+F,开启【Find】窗口,贴上刚刚复制的脚本,找出在Recording Log第一次出现的位置。结果会有二种:o 在Recording Log中找不到要找的数据,这时请先确认您找对了脚本,毕竟现在开启了二个几乎一样的脚本,很容易弄错。o 在Recording Log中找到了要找的数据,这时要确认数据是从服务器端传送过来的。首先可以先检查数据的标头,从标头的Receiving response可以知道数据是从服务器端传送到client端的。假如此数据第一次出现是在Sending request中,则表示此数据是由client端产生,不需要做关联,但是有可能需要做参数化(parameterized)。您要找的标头格式如下:*** [tid=b9 Action1 2] Receiving response from host :80 ( 25/11/2002 12:04:00 )5. 现在您已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联。使用web_reg_save_param函数手动建立关联在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。1. 要在哪里使用web_reg_save_param函数?在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字然后复制,我们将会利用这段文字,来帮助我们找出要关联的动态数据。不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次会开启所有的Log。1. 在VuGen中点选【Vuser】【Run-Time Settings】。2. 点选【General】【Log】。3. 勾选【Enable logging】、【Always sends messages】、【Extended log】,以及【Extended log】下的所有选项。4. 按下【OK】就可以执行脚本了。执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有A.tion1.c(7),这个7就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第7行。在脚本的第7行前插入一行空白行,然后输入web_reg_save_param(“UserSession”,“UserSession” 这个 “UserSession” 就是到时要使用的参数名称,建议给个有意义的名字。注意:到这里整个web_reg_save_param函数还没完成。2. 找出web_reg_save_param中要用到的边界web_reg_save_param函数主要是透过动态数据的前面和后面的固定字符串,来辨识要撷取的动态数据的,所以我们还需要找出动态数据的边界字符串。找出左边界字符串再回到Execution Log中,选取动态数据前的字符串并且复制它。这时会有个问题,到底要选取多少字符串才足以唯一识别要找的动态数据呢?建议是越多越好,但是尽量不要包含到特殊字符。在这边我们选取「input type=hidden name=userSession value=」字符串。选好之后,还要再确认一次这段字符串真的是可以唯一识别的,所以我们在Execution Log中透过Ctrl+F的搜寻,找找看这段字符串是否可以找到要找的动态数据。假如找不到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字符串。将这个边界字符串加到未完成的web_reg_save_param函数中:web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”,找出右边界字符串接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是我们要找的右边界字符串了。以这个例子来看,就是「」,所以再把右边界字符串加入,web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后再加上「LAST);」就完成整个web_reg_save_param函数了。web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”, “RB=”, LAST);将脚本中有用到关联的数据,以参数取代当使用web_reg_save_param建立参数后,接下来就是用“UserSession”参数去取代脚本中写死的(hard-coded)资料。范例:将“Name=userSession”, “Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf”, ENDITEM,换成“Name=userSession”, “Value={UserSession}”, ENDITEM,到这里您已经完成了一个关联了,接下来就是执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。关于 web_reg_save_param 函数对于关联(correlation)来说,web_reg_save_param是最重要的一个函数,其功能是在下载的网页内容中,透过设定的边界字符串,找出特定的数据并将其储存在一个参数中,以供后续脚本使用。接下来将针对web_reg_save_param做比较详细的说明。Service and registration type functionweb_reg_save_param是一个Service function。service function主要是用来完成一些特殊的工作的,如关联、设定proxy、提供认证信息等,当其作用时,不会对网页的内容做任何的修改。web_reg_save_param同时也是一个registration type function (只要函数名称中包含_reg_的字眼,表示其为registration type function)。registration type function意味着其真正作用的时机是在下一个action function完成时执行的。举例来说,当某个web_url执行时所接收到的网页内容中包含了要做关联的动态数据,则必须将web_reg_save_param放在此web_url之前,则web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,再执行web_reg_save_param找寻要做关联的动态数据并建立参数。所以要记住一点,要使用registration type function时,要注意其放置的位置必须在要作用的action function之前。语法int web_reg_save_param(const char *ParamName, list of Attributes, LAST);参数说明ParamName:存放动态数据的参数名称list of Attributes:其它属性,包含 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及 SaveLen。属性值不分大小写,例如 Search=all。以下将详细说明每个属性值的意义:? Notfound:指定当找不到要找的动态数据时该怎么处置。o Notfound=error:当找不到动态数据时,发出一个错误讯息。假如没设定此属性,此为LoadRunner的默认值。o Notfound=warning:当找不到动态数据时,不发出错误讯息,只发出警告,脚本也会继续执行下去不会中断。在对角本除错时,可以使用此属性值。? LB:动态数据的左边界字符串。此属性质是必须要有的,而且区分大小写。? RB:动态数据的右边界字符串。此属性质是必须要有的,而且区分大小写。? RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性质可以是All或是数字,而且可有可无。? Search:搜寻的范围。可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值)。此属性质可有可无。? ORD:指明从第几次出现的左边界开始才是要撷取的数据。此属性质可有可无,默认值是1。假如值为All,则所有找到符合的数据会储存在数组中。? SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始储存到参数中。此属性质不可为负数,其默认值为0。? Convert:可能的值有二种:o HTML_TO_URL: 将HTML-encoded数据转成URL-encoded数据格式o HTML_TO_TEXT:将HTML-encoded数据转成纯文字数据格式? SaveLen:从offect开始算起,到指定的长度内的字符串,才储存到参数中。此参数可有可无,默认值是-1,表示储存到结尾整个字符串。范例web_reg_save_param("A", "LB/ic=a href=", "RB="", "Ord=All", LAST);nner会搜寻网页中所有以 「a href=」 开头,且以 「"」结束,当中包含的字符串,并且储存在「A」参数中。Tips and Tricks以下提供一些关联的常见问题:? 如何打印出参数值?lr_output_message这二个函数来做到。例如:lr_output_message(“Value Captured = %s”, lr_eval_string(“{ParameterName}”));lr_eval_string与lr_output_message函数的使用说明请参考LoadRunner Online Function Reference。? 在脚本的data目录下找不到路制时的快照(snapshot)造成在脚本的data目录下找不到路制时的快照(snapshot)的可能原因如下:o 脚本是由VuGen 6.02或更早的版本所录制的o 汇入的Action不会包含快照(snapshot)的档案o 脚本是储存在只读的目录下,早成VuGen无法储存执行时撷取的快照(snapshot)o 某些步骤并不会产生快照(snapshot),如浏览某个资源o 快照(snapshot)功能被取消【Tools】【Gen
2023-07-26 04:13:171

jenkins 如何选择机器构建

jenkins 如何选择部分机器进行构建,需要以下步骤! Extended Choice Parameter Plug-In name可以随意设置,选项类型可以设置单选或者radio。Choose Source for Value 设置候选项,用分隔符分隔开。其它选项无需设置。 在ssh publishers服务器对应的label,这里要和前面设置的value对应。 最后,一定要点上Parameterized publishing这个选项,Parameter name填写上面你自定义的选项名称。保存即可。
2023-07-26 04:13:241

模型压缩技术:剪枝、量化和蒸馏

模型压缩大体上可以分为 5 种: 许多实验证明,神经网络模型都是过参数化的(over-parameterized),许多参数都是冗余的,恰当的删除这些参数对模型最终的结果几乎没有影响。模型剪枝(model pruning)就是一个很好的例子。神经网络中存在很多数值为零或者数值接近零的权值,合理的去除这些“贡献”很小的权值,再经过对剩余权值的重训练微调,模型可以保持相同的准确率。对于很多神经网络来说,剪枝能够将模型大小压缩10倍以上,这就意味着可以减少10倍以上的模型计算量,结合定制硬件的计算力提升,最终可能达到更高的性能提升 模型剪枝带来的的稀疏性,从计算特征上来看非常的“不规则”,这对计算设备中的数据访问和大规模并行计算非常不友好。例如对GPU来说,我们使用cuSPARSE稀疏矩阵计算库来进行实验时,90%稀疏性(甚至更高)的矩阵的运算时间和一个完全稠密的矩阵运算时间相仿。也就是说,尽管我们知道绝大部分的计算是浪费的(90%稀疏性意味着性能提升的上限是10倍),却不得不忍受“不规则”带来的机器空转和消耗。 通过给神经网络剪枝添加一个“规则”的约束,使得剪枝后的模型更加适合硬件计算,但这种方法通常会牺牲模型的准确率和压缩比。“模型优化(压缩)”在实践中非常常见,已成为标准步骤 剪枝和量化混合使用能达到最佳效果 结论: large-sparse models to consistently outperform small-dense models and achieve up to 10x reduction in number of non-zero parameters with minimal loss in accuracy 参考文献: To prune, or not to prune: exploring the efficacy of pruning for model compression
2023-07-26 04:13:321

java map

Map<Stirng,String> map=new HashMap<String,String>();
2023-07-26 04:13:424

C#程序访问SQL2008报错:已成功与服务器建立联系,但登陆前握手期间发生错误

贴个报错图出来
2023-07-26 04:13:503

J2EE程序代码中出现Map的地方就会有错,提示the type Map is not generic,it cannot be parameterized

你的map里装入的参数,与你定义的泛型不同吧
2023-07-26 04:14:172

控制理论中“receding horizon principle”应该翻译成什么?谢谢

控制理论中“receding horizon principle”翻译成: "滚动优化机制"例句: The algorithm combines the receding horizon principle of predictive control with both differential game theory and nonlinear H∞ control theory,the control variables are parameterized into polynomial control variables by finite dimensional parameterization,and transition equilibriums of the system to be controlled are introduced into the closed-loop optimization. 这种算法把预测控制的滚动优化机制同微分对策理论和非线性H∞控制理论做了有机结合; 在闭环优化中通过有限维参数化方法把控制变量参数化为多项式控制变量,并且引入被控系统的过渡平衡点.
2023-07-26 04:14:261

C#或C++使用信号量机制,编写一个含有两个进程,互斥更改变量n的小程序

这个比较难做,采纳后我远程帮你弄把
2023-07-26 04:14:341

请问matlab中 fmincon()的用法?

FMINCON finds a constrained minimum of a function of several variables. FMINCON attempts to solve problems of the form: min F(X) subject to: A*X <= B, Aeq*X = Beq (linear constraints) X C(X) <= 0, Ceq(X) = 0 (nonlinear constraints) LB <= X <= UB (bounds) X = FMINCON(FUN,X0,A,B) starts at X0 and finds a minimum X to the function FUN, subject to the linear inequalities A*X <= B. FUN accepts input X and returns a scalar function value F evaluated at X. X0 may be a scalar, vector, or matrix. X = FMINCON(FUN,X0,A,B,Aeq,Beq) minimizes FUN subject to the linear equalities Aeq*X = Beq as well as A*X <= B. (Set A=[] and B=[] if no inequalities exist.) X = FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB) defines a set of lower and upper bounds on the design variables, X, so that a solution is found in the range LB <= X <= UB. Use empty matrices for LB and UB if no bounds exist. Set LB(i) = -Inf if X(i) is unbounded below; set UB(i) = Inf if X(i) is unbounded above. X = FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON) subjects the minimization to the constraints defined in NONLCON. The function NONLCON accepts X and returns the vectors C and Ceq, representing the nonlinear inequalities and equalities respectively. FMINCON minimizes FUN such that C(X) <= 0 and Ceq(X) = 0. (Set LB = [] and/or UB = [] if no bounds exist.) X = FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS) minimizes with the default optimization parameters replaced by values in the structure OPTIONS, an argument created with the OPTIMSET function. See OPTIMSET for details. For a list of options accepted by FMINCON refer to the documentation. X = FMINCON(PROBLEM) finds the minimum for PROBLEM. PROBLEM is a structure with the function FUN in PROBLEM.objective, the start point in PROBLEM.x0, the linear inequality constraints in PROBLEM.Aineq and PROBLEM.bineq, the linear equality constraints in PROBLEM.Aeq and PROBLEM.beq, the lower bounds in PROBLEM.lb, the upper bounds in PROBLEM.ub, the nonlinear constraint function in PROBLEM.nonlcon, the options structure in PROBLEM.options, and solver name "fmincon" in PROBLEM.solver. Use this syntax to solve at the command line a problem exported from OPTIMTOOL. The structure PROBLEM must have all the fields. [X,FVAL] = FMINCON(FUN,X0,...) returns the value of the objective function FUN at the solution X. [X,FVAL,EXITFLAG] = FMINCON(FUN,X0,...) returns an EXITFLAG that describes the exit condition of FMINCON. Possible values of EXITFLAG and the corresponding exit conditions are listed below. All algorithms: 1 First order optimality conditions satisfied to the specified tolerance. 0 Maximum number of function evaluations or iterations reached. -1 Optimization terminated by the output function. -2 No feasible point found. Trust-region-reflective and interior-point: 2 Change in X less than the specified tolerance. Trust-region-reflective: 3 Change in the objective function value less than the specified tolerance. Active-set only: 4 Magnitude of search direction smaller than the specified tolerance and constraint violation less than options.TolCon. 5 Magnitude of directional derivative less than the specified tolerance and constraint violation less than options.TolCon. Interior-point: -3 Problem appears to be unbounded. [X,FVAL,EXITFLAG,OUTPUT] = FMINCON(FUN,X0,...) returns a structure OUTPUT with information such as total number of iterations, and final objective function value. See the documentation for a complete list. [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = FMINCON(FUN,X0,...) returns the Lagrange multipliers at the solution X: LAMBDA.lower for LB, LAMBDA.upper for UB, LAMBDA.ineqlin is for the linear inequalities, LAMBDA.eqlin is for the linear equalities, LAMBDA.ineqnonlin is for the nonlinear inequalities, and LAMBDA.eqnonlin is for the nonlinear equalities. [X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD] = FMINCON(FUN,X0,...) returns the value of the gradient of FUN at the solution X. [X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = FMINCON(FUN,X0,...) returns the value of the exact or approximate Hessian of the Lagrangian at X. Examples FUN can be specified using @: X = fmincon(@humps,...) In this case, F = humps(X) returns the scalar function value F of the HUMPS function evaluated at X. FUN can also be an anonymous function: X = fmincon(@(x) 3*sin(x(1))+exp(x(2)),[1;1],[],[],[],[],[0 0]) returns X = [0;0]. If FUN or NONLCON are parameterized, you can use anonymous functions to capture the problem-dependent parameters. Suppose you want to minimize the objective given in the function myfun, subject to the nonlinear constraint mycon, where these two functions are parameterized by their second argument a1 and a2, respectively. Here myfun and mycon are M-file functions such as function f = myfun(x,a1) f = x(1)^2 + a1*x(2)^2; function [c,ceq] = mycon(x,a2) c = a2/x(1) - x(2); ceq = []; To optimize for specific values of a1 and a2, first assign the values to these two parameters. Then create two one-argument anonymous functions that capture the values of a1 and a2, and call myfun and mycon with two arguments. Finally, pass these anonymous functions to FMINCON: a1 = 2; a2 = 1.5; % define parameters first options = optimset("Algorithm","active-set"); % run active-set algorithm x = fmincon(@(x) myfun(x,a1),[1;2],[],[],[],[],[],[],@(x) mycon(x,a2),options) See also optimset, optimtool, fminunc, fminbnd, fminsearch, @, function_handle. Reference page in Help browser doc fmincon
2023-07-26 04:14:442

C++请高手给我调用下这个函数 本人这方面真的没入门

用微软的basic编程吧。
2023-07-26 04:14:512

C#等待线程结束

你把这整个再放到另外一个新线程,不放在主线程里不行吗
2023-07-26 04:14:592

YALMIP中sdpvar格式中(“full”:矩阵完全参数化)是什么意思?

请问你知道了吗我也一直很疑惑
2023-07-26 04:15:082

c#多线程有几种实现方法

这篇文章主要介绍了c#使用多线程的几种方式,通过示例学习c#的多线程使用方式,大家参考使用吧(1)不需要传递参数,也不需要返回参数ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回值。复制代码 代码如下:class Program{static void Main(string[] args){for (int i = 0; i < 30; i++){ThreadStart threadStart = new ThreadStart(Calculate);Thread thread = new Thread(threadStart);thread.Start();}Thread.Sleep(2000);Console.Read();}public static void Calculate(){DateTime time = DateTime.Now;//得到当前时间Random ra = new Random();//随机数对象Thread.Sleep(ra.Next(10,100));//随机休眠一段时间Console.WriteLine(time.Minute + ":" + time.Millisecond);}}(2)需要传递单个参数ParameterThreadStart委托定义为void ParameterizedThreadStart(object state),有一个参数但是没有返回值。复制代码 代码如下:class Program{static void Main(string[] args){for (int i = 0; i < 30; i++){ParameterizedThreadStart tStart = new ParameterizedThreadStart(Calculate);Thread thread = new Thread(tStart);thread.Start(i*10+10);//传递参数}Thread.Sleep(2000);Console.Read();}public static void Calculate(object arg){Random ra = new Random();//随机数对象Thread.Sleep(ra.Next(10, 100));//随机休眠一段时间Console.WriteLine(arg);}}(3)使用专门的线程类(常用)使用线程类可以有多个参数与多个返回值,十分灵活!复制代码 代码如下:class Program{static void Main(string[] args){MyThread mt = new MyThread(100);ThreadStart threadStart = new ThreadStart(mt.Calculate);Thread thread = new Thread(threadStart);thread.Start();//等待线程结束while (thread.ThreadState != ThreadState.Stopped){Thread.Sleep(10);}Console.WriteLine(mt.Result);//打印返回值Console.Read();}}public class MyThread//线程类{public int Parame { set; get; }//参数public int Result { set; get; }//返回值//构造函数public MyThread(int parame){this.Parame = parame;}//线程执行方法public void Calculate(){Random ra = new Random();//随机数对象Thread.Sleep(ra.Next(10, 100));//随机休眠一段时间Console.WriteLine(this.Parame);this.Result = this.Parame * ra.Next(10, 100);}}(4)使用匿名方法(常用)使用匿名方法启动线程可以有多个参数和返回值,而且使用非常方便!复制代码 代码如下:class Program{static void Main(string[] args){int Parame = 100;//当做参数int Result = 0;//当做返回值//匿名方法ThreadStart threadStart = new ThreadStart(delegate(){Random ra = new Random();//随机数对象Thread.Sleep(ra.Next(10, 100));//随机休眠一段时间Console.WriteLine(Parame);//输出参数Result = Parame * ra.Next(10, 100);//计算返回值});Thread thread = new Thread(threadStart);thread.Start();//多线程启动匿名方法//等待线程结束while (thread.ThreadState != ThreadState.Stopped){Thread.Sleep(10);}Console.WriteLine(Result);//打印返回值Console.Read();}}(5)使用委托开启多线程(多线程深入)1、用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。复制代码 代码如下:class Program{private delegate int NewTaskDelegate(int ms);private static int newTask(int ms){Console.WriteLine("任务开始");Thread.Sleep(ms);Random random = new Random();int n = random.Next(10000);Console.WriteLine("任务完成");return n;}static void Main(string[] args){NewTaskDelegate task = newTask;IAsyncResult asyncResult = task.BeginInvoke(2000, null, null);//EndInvoke方法将被阻塞2秒int result = task.EndInvoke(asyncResult);Console.WriteLine(result);Console.Read();}}2、使用IAsyncResult.IsCompleted属性来判断异步调用是否完成复制代码 代码如下:class Program{private delegate int NewTaskDelegate(int ms);private static int newTask(int ms){Console.WriteLine("任务开始");Thread.Sleep(ms);Random random = new Random();int n = random.Next(10000);Console.WriteLine("任务完成");return n;}static void Main(string[] args){NewTaskDelegate task = newTask;IAsyncResult asyncResult = task.BeginInvoke(2000, null, null);//等待异步执行完成while (!asyncResult.IsCompleted){Console.Write("*");Thread.Sleep(100);}// 由于异步调用已经完成,因此, EndInvoke会立刻返回结果int result = task.EndInvoke(asyncResult);Console.WriteLine(result);Console.Read();}}3、使用WaitOne方法等待异步方法执行完成WaitOne的第一个参数表示要等待的毫秒数,在指定时间之内,WaitOne方法将一直等待,直到异步调用完成,并发出通知,WaitOne方法才返回true。当等待指定时间之后,异步调用仍未完成,WaitOne方法返回false,如果指定时间为0,表示不等待,如果为-1,表示永远等待,直到异步调用完成。复制代码 代码如下:class Program{private delegate int NewTaskDelegate(int ms);private static int newTask(int ms){Console.WriteLine("任务开始");Thread.Sleep(ms);Random random = new Random();int n = random.Next(10000);Console.WriteLine("任务完成");return n;}static void Main(string[] args){NewTaskDelegate task = newTask;IAsyncResult asyncResult = task.BeginInvoke(2000, null, null);//等待异步执行完成while (!asyncResult.AsyncWaitHandle.WaitOne(100, false)){Console.Write("*");}int result = task.EndInvoke(asyncResult);Console.WriteLine(result);Console.Read();}}4、使用回调方式返回结果要注意的是“my.BeginInvoke(3,300, MethodCompleted, my)”,BeginInvoke方法的参数传递方式:前面一部分(3,300)是其委托本身的参数。倒数第二个参数(MethodCompleted)是回调方法委托类型,他是回调方法的委托,此委托没有返回值,有一个IAsyncResult类型的参数,当method方法执行完后,系统会自动调用MethodCompleted方法。最后一个参数(my)需要向MethodCompleted方法中传递一些值,一般可以传递被调用方法的委托,这个值可以使用IAsyncResult.AsyncState属性获得。复制代码 代码如下:class Program{private delegate int MyMethod(int second, int millisecond);//线程执行方法private static int method(int second, int millisecond){Console.WriteLine("线程休眠" + (second * 1000 + millisecond) + "毫秒");Thread.Sleep(second * 1000 + millisecond);Random random = new Random();return random.Next(10000);}//回调方法private static void MethodCompleted(IAsyncResult asyncResult){if (asyncResult == null || asyncResult.AsyncState == null){Console.WriteLine("回调失败!!!");return;}int result = (asyncResult.AsyncState as MyMethod).EndInvoke(asyncResult);Console.WriteLine("任务完成,结果:" + result);}static void Main(string[] args){MyMethod my = method;IAsyncResult asyncResult = my.BeginInvoke(3,300, MethodCompleted, my);Console.WriteLine("任务开始");Console.Read();}}5、其他组件的BeginXXX和EndXXX方法在其他的.net组件中也有类似BeginInvoke和EndInvoke的方法,如System.Net.HttpWebRequest类的BeginGetResponse和EndGetResponse方法。其使用方法类似于委托类型的BeginInvoke和EndInvoke方法,例如:复制代码 代码如下:class Program{//回调函数private static void requestCompleted(IAsyncResult asyncResult){if (asyncResult == null || asyncResult.AsyncState==null){Console.WriteLine("回调失败");return;}HttpWebRequest hwr = asyncResult.AsyncState as HttpWebRequest;HttpWebResponse response = (HttpWebResponse)hwr.EndGetResponse(asyncResult);StreamReader sr = new StreamReader(response.GetResponseStream());string str = sr.ReadToEnd();Console.WriteLine("返回流长度:"+str.Length);}static void Main(string[] args){HttpWebRequest request =(HttpWebRequest)WebRequest.Create("http://www.baidu.com");//异步请求IAsyncResult asyncResult = request.BeginGetResponse(requestCompleted, request);Console.WriteLine("任务开始");Console.Read();}}
2023-07-26 04:15:181

C#多线程处理DataRow时报错

while (true) 在搞鬼,你的这个死循环有什么用呢?
2023-07-26 04:15:263

the parameterized query expects the parameter which was not supplied,什么意

参数化查询期望未提供的参数。希望能帮到你(⊙o⊙)哦
2023-07-26 04:15:462

c# 传参的方式能完全防止sql注入吗?

参数化sql语句完全能够防止sql注入,我说得是完全。不必再过滤什么了。参数化sql是直接生成sql数据库查询底层的参数,而不是通过编译器和解释器根据sql语句自动分词,确定参数的值(这样容易被骗)。比如:select 姓名 from 基本信息 where 学号="18",客户构造sql语句:select 学号 from 基本信息 where 学号="" or "1"="1",sql数据库系统编译解释为:1.这是一条select语句;2。操作的表为“基本信息”;3。返回字段为“姓名”;4。条件为学号="" or "1"="1"5。学号的参数为""。这样就被骗了。而采用参数化方法,select 学号 from 基本信息 where 学号=@studentID,参数@studentID=" or "1"="最后编译解释为select 学号 from 基本信息 where 学号="" or "1"=""相当于在参数@studentID的值的外面加上了一个看不见的"",所以无论对方构造的如何巧妙,都无法注入。
2023-07-26 04:15:543

用汇编语言启动ad转换

if (superclass instanceof Class) { throw new RuntimeException("Missing type parameter."); } ParameterizedType parameterized = (ParameterizedType) superclass; return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]); }
2023-07-26 04:16:031

The type ArrayList is not generic; it cannot be parameterized with arguments

你需要把public ArrayList<T> getAll() 中的T换成具体的类名,例如public ArrayList<String> getAll()
2023-07-26 04:16:111

求翻译 eclipse 提示信息

楼上说极是。。类型安全。。因为你用了泛型类。。但没有指定泛型类型。。所以就提示你最好指定类型。。你应该是用的Collection c = new Collection()吧。。其实不指定也没什么的。。只要你能清楚的知道你用的什么类型。。
2023-07-26 04:16:192

数据库出现 DB2 SQL error: SQLCODE: -206, SQLSTATE: 42703, SQLERRMC: ISPWD 怎么回事??

ISPWD 在你使用的场景之中有误。检查你的SQL语句之中的ISPWD,看看表中是否有这一对象。db2 => ? sql206SQL0206N "<name>" is not valid in the context where it is used.Explanation:This error can occur in the following cases:* For an INSERT or UPDATE statement, the specified column is not a column of the table, or view that was specified as the object of the insert or update.* For a SELECT or DELETE statement, the specified column is not a column of any of the tables or views identified in a FROM clause in the statement.* For an assignment statement, the reference name does not resolve to the name of a column or variable.* When referencing a field in a row type variable, the reference name does not resolve to the name of any field in the row type.* For an ORDER BY clause, the specified column is a correlated column reference in a subselect, which is not allowed.* For a SELECT statement in a parameterized cursor constructor, the reference to "<name>" does not match a column or in-scope variable. Local variables and routine SQL parameters are not considered in scope for parameterized cursors.* For a standalone compound SQL (compiled) statement: * The reference "<name>" does not resolve to the name of a column or local variable that is in scope. * The condition name "<name>" specified in the SIGNAL statement has not been declared. * When referencing a field in a row type variable, the reference name does not resolve to the name of any field in the row type.* For a CREATE TRIGGER,CREATE METHOD,CREATE FUNCTION or CREATE PROCEDURE statement: * The reference "<name>" does not resolve to the name of a column, local variable or transition variable. * The reference "<name>" resolves to the name of a local variable that is not available in the current scope. * The condition name "<name>" specified in the SIGNAL statement has not been declared. * When referencing a field in a row type variable, the reference name does not resolve to the name of any field in the row type.* For a CREATE TRIGGER statement: * A reference is made to a column of the subject table without using an OLD or NEW correlation name. * The left hand side of an assignment in the SET transition-variable statement in the triggered action specifies an old transition variable where only a new transition variable is supported.* For a CREATE FUNCTION statement with a PREDICATES clause: * The RETURN statement of the SQL function references a variable that is not a parameter or other variable that is in the scope of the RETURN statement. * The FILTER USING clause references a variable that is not a parameter name or an expression name in the WHEN clause. * The search target in an index exploitation rule does not match some parameter name of the function that is being created. * A search argument in an index exploitation rule does not match either an expression name in the EXPRESSION AS clause or a parameter name of the function being created.* For a CREATE INDEX EXTENSION statement, the RANGE THROUGH clause or the FILTER USING clause references a variable that is not a parameter name that can be used in the clause.* For a parameterized cursor variable reference, a local SQL variable or SQL parameter referenced in the select statement used in the definition of a parameterized cursor variable is not available in the current scope.The statement cannot be processed.User response:Verify that the names are specified correctly in the SQL statement. Fora SELECT statement, ensure that all the required tables are named in theFROM clause. For a subselect in an ORDER BY clause, ensure that thereare no correlated column references. If a correlation name is used for atable, verify that subsequent references use the correlation name andnot the table name.For a CREATE TRIGGER statement, ensure that only new transitionvariables are specified on the left hand side of assignments in the SETtransition-variable statement and that any reference to columns of thesubject table have a correlation name specified.For a standalone compound SQL statement, CREATE FUNCTION, CREATEPROCEDURE, or CREATE TRIGGER statement, verify that the columns orvariables are available in the scope of the current compound SQLstatement.For a fullselect embedded in XQuery using the db2-fn:sqlquery function,a reference within the fullselect must be one of the following: a columnin the context of the fullselect, a global variable, or a parameterpassed to the new SQL context using an additional argument of thedb2-fn:sqlquery function.sqlcode: -206sqlstate: 42703db2 =>
2023-07-26 04:16:282

边际似然函数

In statistics, a marginal likelihood function, or integrated likelihood, is a likelihood function in which some parameter variables have been marginalized. In the context of Bayesian statistics, it may also be referred to as the evidence or model evidence.Given a set of independent identically distributed data points where according to some probability distribution parameterized by θ, where θ itself is a random variable described by a distribution, i.e. the marginal likelihood in general asks what the probability is, where θ has been marginalized out (integrated out):
2023-07-26 04:16:431

求助关于sigma-delta时域仿真工具SIMSIDES使用时报错的问题

第一个是在打开工具箱里的EXAMPLEWarning: c21_FElp_alleffects.mdl, line 1205: "c21_FElp_alleffects/Third Integrator"is a parameterized link. To view, discard, or propagate the changes for this link,use the "Link Options" menu item In generalprivateopenmdl at 13 In open at 159 In uiopen at 196 第二个是在双击模块进行参数设置Error in"SC_FE_Integrator_All_EffectsII".Parameter "c" setting: "" cannot be evaluated.Error : This statement is incomplete.
2023-07-26 04:16:501

unity c#跨线程调用怎么实现

unity中 必须在unity的主线程下进行工作 如果一定要使用其他线程的话 只有将其他线程作的操作存入队列 等待unity中的update方法中去读取队列
2023-07-26 04:17:282

JAVA中的一个小问题

按道理:范型。
2023-07-26 04:17:385

ug问题。部件里面有个图标不认识求大神。我新手。名unparameterized_feature。

2023-07-26 04:17:533

c#多线程中控件的Invoke()中参数为什么不能直接传一个方法也不能传一个Lamda函数而要用newAction这种方式

你都已经用匿名委托用 => 了,这不是 Lambda 是啥!Invoke() 方法参数是一个委托类型,要是不用匿名委托的话,你得定义一个 delegate 类型对象传进去。
2023-07-26 04:18:071

在c#窗体中,有没有一种插件能将文字转为音频输出?

不知道
2023-07-26 04:18:153

matlab解方程结果中出现k,z1

这个解是一个周期的,相当于z1+k*2pi我用2011a解出的z1是 a=solve("1/tan(0.1396)-tan(belta)*((1.4+1)/2*2.42^2/((2.42*sin(belta))^2-1)-1)","belta")Warning: The solutions are parametrized by thesymbols:z1 = {-2.6021175530621458747511937039231,-1.6345328610843005672973258879376,-0.33613856623824341564544548305855,0.53947510052764736371144967935642,1.5070597925054926711653174953419,2.805454087351549822817197900221}
2023-07-26 04:19:221