【最后有彩蛋】Pyhton接口测试手册

目录

目录 I
说明 3
第1章 环境及工具 4
1.1 环境配置 4
1.2 编译器安装 4
1.3 需要安装的Python库 7
1.4 安装Python库方法 7
1.5 卸载Python库方法 9
在命令行下执行“pip uninstall [模块名]”,如:“pip uninstall nose”。 9
第2章 测试框架介绍 10
2.1 导入demo 10
2.2 文件结构 10
2.3 环境配置 11
2.4 接口调用 12
2.5 测试用例 15
2.6 测试运行 19
2.7 测试结果 21
第3章 测试代码命名规范 23
3.1 测试集命名 23
3.2 接口调用命名 23
3.3 测试类命名 24
3.4 测试用例命名 24
3.5 变量命名 25
3.6 常量命名 25
第4章 测试运行每日构建 26
4.1 测试脚本的配置 26
4.2 站点的部署 26
4.3 构建任务设置 28
第5章 断言机制 34
5.1 参考资料 34
5.2 原有断言方法 34
5.3 自定义断言方法 38
5.4 常用断言补充 39
附录 常见问题 41
1 安装python模块 41
2 编码、运行问题 43
3 每日构建的问题 44
4 python代码书写规范 44

说明
该手册介绍以下内容:
1.Python的Api测试框架介绍
2.Api测试的一些规范(补充ing…)
3.Api测试的一些常见问题及解决方法(补充ing…)

第1章 环境及工具
1.1 环境配置
操作系统:windows 7 (32位/64位)
语言版本:3.7 (推荐3.7,python 2.7是已经在步入坟墓的版本, 以后支持的库会越来越少)

一、语言环境安装
下载安装包,可以更改安装目录,剩下均默认安装。
32位 https://www.python.org/ftp/python/3.7.5/python-3.7.5.exe
64位https://www.python.org/ftp/python/3.7.5/python-3.7.5-amd64.exe

二、配置环境变量
系统变量中的Path,增加Python的安装路径(需要填写实际的安装文件路径),如:C:\Python27;C:\Python27\Scripts,记得在添加前先加上“;”。配置了C:\Python27\Scripts,就不会提示“pip不是内部或外部命令”了
在这里插入图片描述
可以在命令行下输入“python”来验证是否配置成功。若输出python的版本号、位数等信息,说明成功。
在这里插入图片描述
注:老项目没办法就继续维护python2的代码,新项目换成python3来写,可以装两个版本python。环境变量记得配上“;E:\install\Python37;E:\install\Python37\Scripts;E:\install\Python27;E:\install\Python27\Scripts”安装库命令行分别是pip3 install XXX和pip2 install XXX

1.2 编译器安装
一、安装Pycharm编译器
在这里插入图片描述
pycharm-professional-2018.3.3的下载地址百度一下,或者向我要安装包。除了可以修改安装地址,其他一路默认安装。

。。。

三、设置Interpreter
注册成功后可以开始使用编译器,但是首次使用需要设置一下Interpreter。

1.选择入口
入口一:
选择编译器左上角“File”->“Settings…”,选择“Project Interpreter”。
在这里插入图片描述
入口二:
代码区域上方会显示黄色区域,提示还没有配置Interpreter,点击区域右侧“Configuer Python Interpreters”进入。
在这里插入图片描述

2.进入选择后,在下拉框中选择Interpreter,若下拉框中没有Interpreter,可以点击“Configuer Interpreters”,手动添加Interpreters路径。点击ok保存。

在这里插入图片描述
在这里插入图片描述
3.设置完成后,编译器左侧Project的扩展库显示Interpreters信息,版本号正确即可。


1.3 需要安装的Python库
需要安装的模块:
xmlrunner、MySQLdb、hamcrest、redis、fixtures、nose……

可能需要安装的模块:
1.根据测试需要而定;
2.有时easy_install会提示找不到包,或者超时。但实际上包是存在的,且下载页面是可以访问的。出现提示的时候再自行下载安装。
1.4 安装Python库方法
导入某个库的语句(“import xxx”)有红色波浪线标示,说明这个库还没有安装。框架涉及到的库比较多,但是安装方法都大同小异。在这介绍三种安装python库的方法,需要安装库的时候尝试下这几种方法就能解决。
提供几处下载地址:

  1. [各种python扩展库的各种版本]
    http://www.lfd.uci.edu/~gohlke/pythonlibs/ 或
    https://pypi.python.org/simple/ [国外]
    http://pypi.v2ex.com/simple/ [国内镜像]

一、easy install
大多数的库都可以使用easy install方法来安装。使用这种方法之前,需要先安装插件setuptools-0.6c11.win32-py2.7。

并添加安装路径,如C:\Python27\Scripts,到环境变量Path。
在这里插入图片描述
在命令行下输入“easy_install”,没有提示“xxx不是内部或外部命令……”,就说明easy install工具安装成功。
在这里插入图片描述
python库安装示例:
easy_install加上要安装的库名,如“easy_install xmlrunner”
在这里插入图片描述
没有错误信息提示,则表示安装成功。

二、setup.py文件安装
某些库下载下来的安装文件不是安装包,而是带有setup.py文件的文件夹,则需要使用文件安装方法。
在这里插入图片描述
python库安装示例:
如要安装PyHamcrest-master模块,则在命令行下进入PyHamcrest-master的setup.py文件的目录,输入命令“python setup.py install”
在这里插入图片描述
没有错误信息提示,则表示安装成功。
在这里插入图片描述

三、安装包安装
在以上推荐的第二个网址,下载对应的安装包,一般只需要一路默认安装即可。

1.5 卸载Python库方法
在命令行下执行“pip uninstall [模块名]”,如:“pip uninstall nose”。
第2章 测试框架介绍
2.1 导入demo
创建项目的方法就不描述了,在这直接说明下如何快速使用已有的python测试框架。
在这里插入图片描述
打开编译器后,选择“Open Directory”,选择代码路径,打开现有的框架demo。
在这里插入图片描述

2.2 文件结构
工程文件主要分几个部分:
1.环境配置
2.接口调用
3.测试用例
4.测试运行
5.测试结果
6.其他文件

整体的工程文件结构如下图的demo工程结构所示,在接下去的章节中将依次介绍:

2.3 环境配置
与环境配置相关的,有三个部分:cfgtype.ini文件、cof文件夹中的conf.py文件、config文件夹。

一、选择接口测试环境的类型
接口测试的环境可以有多种–mock、dev、test、debug、product等等。不同环境的host、port不尽相同,cfgtype.ini文件相当于一个开关,将文件中的type赋值为你所需要的环境类型,测试代码将会测试对应环境的接口。如下图,选择了development环境,其他类型可以用“;”注释起来。
在这里插入图片描述

在cof–>conf.py文件中,会读取cfgtype.ini文件中配置的类型。

在这里插入图片描述
二、配置对应环境的接口地址
在congfig文件夹中,包含有名称对应于各测试环境类型的文件夹,其中配置了该种环境的各接口host和port。
如上图,cfgtype.ini文件中选择了development环境,则接口的地址信息就在config–>development–>cfg.ini文件中:
在这里插入图片描述

接口测试代码涉及到对多种服务接口的测试,可以在ini配置文件中,将各个服务的地址信息分不同的section来表示。Section的名称自定义。如下图配置了mysql、分布式s3账号的host、port:
在这里插入图片描述
2.4 接口调用
每一种服务都需要编写单独的接口调用代码,以下以分布式存储服务为例。各种服务的部分都统一归于api_call文件夹下,接口调用模块的文件结构如下图:

在这里插入图片描述
一、配置信息的读取
distributed–>base–>http.py文件里包含了对http配置信息读取方法的封装,每种服务的都差不多。但是由于每种服务的配置来源不同,所以需要在每种服务的接口调用模块中各自添加http.py文件。
在这里插入图片描述

二、http基本方法的封装
cof–>http.py文件里的Http类,封装了基于httplib库的http请求方法。实现了GET、POST、PUT、DELETE等http方法。这些方法都是调用request方法,但指定了具体的请求方式,同时将响应消息转换为字典格式数据,包含的数据有:
1.code:接口响应的状态码
2.data:接口响应的数据
3.request:请求接口的数据,在case出错时提供,以便问题排查。

在这里插入图片描述
三、接口调用
分布式存储服务distributed文件夹下的v03文件夹,表示版本为v0.3的接口的调用代码。每个接口的调用过程都单独被封装在一个类成员方法中,如下图所示:
在这里插入图片描述

实现接口调用方法后,可以在同一个文件中编写方法调用代码,做下简单的单元测试。
在这里插入图片描述
2.5 测试用例
测试用例的文件,以文件夹名称区分版本号,以case文件名称区分被测的接口服务类型。如下图,distribute文件夹表示用例与分布式账号接口有关;下一级的v0_3表示用例为v0.3的版本。
在这里插入图片描述
前几个版本的框架demo,使用的是unittest单元测试框架来运行用例。现在引入了新的框架–nose。Nose是对unittest的扩展,向下兼容,所以原先遵循unittest规则编写的用例,使用nose同样可以运行,不需要修改之前的代码。而且生成测试报告的过程也做了相应的修改,可以兼容两种格式的用例的信息显示。以下介绍下两种框架的特性以及使用规则。

一、遵循unittest框架编写用例代码
代码可以参考框架demo中的test_distributed_account.py。
1.测试类要传入unittest.TestCase做参数。
在这里插入图片描述
2.setUp( )方法是测试类的构造函数,可以在方法内创建全局的接口调用类对象,或者对self变量其他字段进行初始赋值。
在这里插入图片描述
3.teardown( )方法是测试类的析构函数。
在这里插入图片描述
为了在测试时形成操作闭环,可以在setUp( )中标记资源创建标志,若用例中有创建资源,则修改标志位,在tearDown( )方法中释放资源。
(注:setUp和tearDown方法是在每个测试方法执行前后都运行一次的,而不是在整体运行前后执行一次)
4.可以指定整个类的初始化方法(使用注解@classmethod,开始方法名为setup_class( ),结束方法名为teardown_class( ))。
在这里插入图片描述
5.测试方法要以“test_”开头。一个测试方法,就是一个case。针对一个接口可以有多个测试方法。
在测试方法中,调用封装好的接口请求方法,并对返回的结果做断言。断言字段的完整性、数据的正确性。并要记得及时回收测试数据。如下图所示:
在这里插入图片描述

6.用例按照名称字典序顺序运行。这种规则不便于新增用例时的顺序控制,会增加额外的工作量。

二、遵循nose框架编写用例代码
由于nose框架是对unittest的扩展,所以大部分的使用是一样的,以下主要说明不同点。代码可以参考框架demo中的test_nose_demo.py。
1.Nose框架可以自动识别测试用例,它会搜索名称以“test”或“Test”开头的模块(含有“init.py”的文件夹),然后在该模块中搜索符合同样规则的用例。
根据python的接口测试框架用例命名规范,要求用例所在模块(文件)和测试方法的名称都以“test_”开头。
2.使用nose框架,测试方法不需要被写在测试类中。
3.用例是按照书写的位置顺序执行的。这种规则便于根据实际业务需求指定用例顺序。
4.可以指定整个模块的构造函数、析构函数(setup_module( )和teardown_module( ));
在这里插入图片描述
也可以指定单个测试方法的构造函数、析构函数(使用“@with_setup”注解)。

在这里插入图片描述
2.6 测试运行
一、运行单个用例
编写好用例代码之后,可以对单独一个方法右键运行:
在这里插入图片描述

也可以对文件标签右键,运行当前模块的全部用例:

在这里插入图片描述
二、指定测试用例集
与用例运行相关的文件,都处于runner文件夹下。
在这里插入图片描述
1.“HTMLTestRunner.py”实现报告的生成。
2.“suites.json”文件配置了测试集。按照“文件夹 – 文件”层级,将用例集写成json数据。超过2层的目录,可以使用点分格式书写,如distribute文件夹下还有1层文件夹,则可以写为"v0_3.test_distributed_account”。
在这里插入图片描述
还需要指定测试集标题(title)、报告生成的目录(report_file)、报告推送接收人(receivers)、推送接收群(group)。
3.“runner.py”文件里,获取指定的测试集。运行runner.py文件,就可以运行所有被指定的测试集的case。

在这里插入图片描述
2.7 测试结果
一、测试结果
一方面:运行的结果会在编译器的控制台中显示,F表示一个fail,点表示一个通过,E表示程序自身异常。
另一方面:运行结束后,会在test_reports文件夹中生成以运行时时间命名的html报告文件。报告存放的文件目录结构,取决于在json文件中配置的report_file值。
在这里插入图片描述
另外可以实现测试结果数据提取,通过推送数据以及报告链接(具体设置方法见章节:测试代码每日构建)
在这里插入图片描述
这一系列运行步骤,都在runner.py中实现。使用suites.json配置文件的数据、再结合jenkins任务,可以做到任意划分一个工程中的测试集,定制推送人员、群组,灵活指定测试时间及频率。当大产品下有多个项目时,不需要新建代码工程,可以并行开发测试脚本互不影响;也可以配合开发人员,快速响应接口测试需求。

第3章 测试代码命名规范
如果测试代码的名称是杂乱无章的,或者不可望文见义的,将不便于测试人员在查看测试结果时定位问题出处。
3.1 测试集命名
测试集(代码文件)名称格式:
test +被测服务[+被测对象]

  1. 测试集以“test”开头;
  2. 被测服务:例如mysql服务、mongodb服务,或者教务系统的学生信息、课程信息;
  3. 被测对象(可选):如果被测服务之下还有较多的子服务,可以再增加一个被测对象层,如账号中心还可以细分为user、role、organization、node;
  4. 版本号:往往一种服务在出新版本接口的时候,可能还需要兼容旧版本接口,而不同版本的接口之间必定存在差异,所以需要用版本号来区分测试集。

举例:
(结合版本号,列举层级的文件夹/文件名称)账号中心v0.3版本,用户相关接口的测试集,命名如下:
testcases/account/v03/test_account_user.py 或
testcases/account/v03/testAccountUser.py
3.2 接口调用命名
调用接口的相关文件(夹)名称格式:
1.调用接口的相关文件结构是:文件夹-文件夹-文件;
2.文件结构的命名依次是:被测服务-版本号-被测对象;
3.文字使用小写开头;
4.遵循驼峰法。

调用类名称格式:
被测对象
1.文字以大写开头;
2.遵循驼峰法;

文件结构如下图所示:
在这里插入图片描述
在测试用例文件中引用该模块的时候,层级结构便一目了然。

举例:
手机端门户v0.6版本的pms服务调用相关
调用代码文件夹名称 mobilePortal.v06.pmsV06
调用类名称 Pms
在用例模块中引用调用模块 from mobilePortal.v06.pmsV06 import Pms
3.3 测试类命名
测试类名称格式:
被测对象+Test (即调用类的名称+Test)

举例:
pms服务测试类:PmsTest
3.4 测试用例命名
测试用例名称格式:
test+操作+状态
1.由于是基于unittest框架,所以用例必须以“test_”开头,否则框架不会将方法识别为测试方法;
2.操作:表示对被测对象的操作,如增删改查;
3.状态:表示操作的结果,或者参数情况;
4.可以用下划线连接各部分(小写),或者遵循驼峰法。

举例:
Pms接口的测试用例
获取pms信息
(正向) test_get_pms_info_ok test_GetPmsInfoOk
获取pms信息
(id不存在) test_get_pms_info_id_invalid Test_GetPmsInfoIdInvalid
3.5 变量命名
变量名称格式:
1.以小写开头;
2.遵循驼峰法;
3.尽量不以“”开头,单词之间可以用“”划分;
4.名称简短且应该易于记忆,能够指出其用途。

举例:
获取到的Mongodb列表,命名如:mongodb_list
3.6 常量命名
常量名称格式:
1.使用大写字母;
2.并且指出该常量完整含义。

举例:
最大用户数,命名如:MAX_USER_COUNT

第4章 测试运行每日构建
实现每日构建,即每天在服务器上自动运行接口测试代码。
同时,增加测试结果的推送,可以在第一时间了解测试结果。
4.1 测试脚本的配置
测试集(suites):
在“测试框架介绍”一章的“测试运行“一节中,介绍了如何指定测试用例集。
运行测试集:
在runner.py的run_test_cases( )方法中可以获取测试集、指定报告的文件名称和title:
在这里插入图片描述
推送人员配置:
在配置文件daily.ini中可以指定接收报告者的工号。
在这里插入图片描述
4.2 站点的部署
将报告的目录部署为一个web站点,就可以随时通过url链接查看每一次运行的报告内容,在推送信息中附上链接地址,便于测试结果的分享。

环境:
windows 7 / windows server 2003 / windows server2008 + IIS

安装IIS:
以下教程指导了如何安装可以搭建asp站点的IIS,肯定可以满足对静态站点的搭建要求。以windows 7为例,其他系统的安装方法大同小异。
http://jingyan.baidu.com/article/219f4bf723bcb2de442d38ed.html

设置站点:
1.创建站点:
打开IIS – 网站 – 右键 添加网站 – 输入站点信息
如下图所示
在这里插入图片描述

2.设置访问文件夹权限
站点 – IIS栏 – 目录浏览 – 启用
在这里插入图片描述
在这里插入图片描述

然后就可以用浏览器访问报告的目录了,如下图:
在这里插入图片描述
选择文件即可查看测试结果:
在这里插入图片描述
4.3 构建任务设置
系统环境:
运行计划任务的服务器即为4.2中部署站点的机子,系统环境可以是windows 7 / windows server 2003 / windows server2008。需要保证机子在每日运行脚本的时间处于开机状态。
同时,为了保证服务器上代码是最新的测试脚本,需要安装svn工具。

批处理:
在bat文件中,指定svn工具安装的路径、脚本代码所在路径(所有代码所在的文件夹)、要执行的脚本文件(construction_win32.py)路径。然后设置svn的update动作,以及执行脚本动作。Bat文件内容如下图所示:

在这里插入图片描述

一、使用计划任务定时任务
在命令行中创建计划任务,设置需要的频率,定时运行bat即可。
【创建任务】创建计划任务的语句,语法是(注意空格):
schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m month[,month…] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u [domain]user /p password]] [/ru {[Domain]User | “System”} [/rp Password]] /?
参数说明详见http://www.feiesoft.com/windows/cmd/schtasks.htm

创建每日构建任务的语句格式:
schtasks /create /tn 任务名称 /tr 批处理文件路径 /sc DAILY /st 运行时间(格式HH:MM:SS) /sd 开始日期(格式 YYYY/MM/DD)
例如:
schtasks /create /tn auto_portal /tr “E:\Project\MOOCAPI\MoocApi.bat” /sc DAILY /st 09:58:00 /sd 2015/03/02

创建完成后,在计划任务程序中可以查看到该任务(在“开始”中搜“计划任务”)。如果需要修改任务配置,可以直接使用“右键—属性”修改。
在这里插入图片描述

【删除任务】若要删除任务,可以执行如下命令:
schtasks /delete /tn任务名称

二、使用jenkins构建任务
首先需要在服务器上安装jenkins,此处不赘述,仅说明创建jenkins job的步骤。
1.添加视图:一般是以项目为单位创建视图。

在这里插入图片描述
在这里插入图片描述
2.创建任务:选择这个视图,点击“新建”,选择“构建一个自由风格的软件项目”。创建成功后,就可以在视图列表中看到这个job。

在这里插入图片描述
在这里插入图片描述
3.配置任务:进入该job,点击“配置”。
在这里插入图片描述
在“构建”一栏点击“增加构建步骤”,然后在“命令”中填写bat文件的路径。
在这里插入图片描述
4.设置运行时间:在“构建触发器”一栏勾选“Build periodically”,然后在“日程表”中填写需要运行的频率。日程表的语法格式,见右侧“?”,有详细说明。

在这里插入图片描述
5.配置完成后,可以点击“立即构建”执行一次job。点击“构建历史”,可以查看构建的具体信息。

在这里插入图片描述

第5章 断言机制
该框架中使用的是python版hamcrest断言库。Hamcrest支持丰富的断言方式,支持模糊匹配,从而可以灵活断言实际值与期望值之间的关系。
使用hamcrest库,需要安装hamcrest,并在代码中引用它“from hamcrest import *”。
5.1 参考资料
Hamcrest的官方参考文档http://pyhamcrest.readthedocs.org/en/latest/library/

5.2 原有断言方法
在断言方法assert_that( )中,一般有三个参数:
1.实际值,作为被用来做断言的变量;
2.期望值,用来匹配变量值的数据;
3.原因,断言失败时提供的信息。
其中,原因是可选参数。

以下将列举,在断言时用来指定实际值与期望值之间关系的常用方法(代码见框架demo中test_assert_demo.py文件):
一、关于对象的匹配
1.判断两者值相等,方法:equal_to( )。
在这里插入图片描述
2.对象的长度判断,方法:has_length( )。
在这里插入图片描述
3.判断对象的内容,方法:has_string( )。同时可以结合其他定位字符串位置的方法使用。
在这里插入图片描述
4.具有某些属性,且对应值相等,方法:has_properties( )、has_ property( )。
在这里插入图片描述
5.断言对象类型,方法:instance_of( )、same_instance( )。
在这里插入图片描述
6.断言是否为None,方法:none( )、not_ none( )。
在这里插入图片描述
二、关于数值的匹配
1.判断数值在误差范围内相等,方法:close_to( )。
在这里插入图片描述
2.判断数值之间的大小关系,方法:greater_than( )、greater_than_or_equal_to( )、less_than( )、less_than_or_equal_to( )。
在这里插入图片描述

三、关于字符串的匹配
1.判断字符串的包含关系,方法:contains_string ( )、ends_with( )、starts_with( )、string_contains_in_order( )。
在这里插入图片描述
2.判断字符串的相等关系,方法:equal_to_ignoring_case( )、equal_to_ignoring_whitespace ( )、matches_regexp ( )。
在这里插入图片描述

四、逻辑方法
1.判断逻辑不相同,方法:is_not ( )、not_( )、is_( )。
在这里插入图片描述
五、关于字典的断言
1.具有某些键,且对应值相等,方法:has_entries( )、has_entry( )。
用法同“一、4”中的has_properties( )、has_ property( )。
2.其他的键值判断方法:has_key( )、has_value( )。
在这里插入图片描述

5.3 自定义断言方法
Hamcrest支持使用自定义的断言方法。
首先引用Hamcrest的库:
在这里插入图片描述
然后实现自定义断言的类。_matches( )是判断是否匹配的方法,describe_to( )指定了断言失败时提示的描述。
在这里插入图片描述
最后就可以在assert_that中使用自定义的断言类:
在这里插入图片描述

5.4 常用断言补充
一、断言实例、类型的类型
可以用instance_of( )来判断,也可以引用python types库,与types具有的类型进行对比。
实例类型判断,如:
在这里插入图片描述

附录 常见问题
1 安装python模块
一、查看已经安装的python模块,以及对应的版本
先安装pip模块,然后在命令行下使用“pip show”。
如果提示“Unkonwn or unsupported command ‘list’”,参考以下解决方法
http://stackoverflow.com/questions/7469361/pip-on-windows-giving-the-error-unknown-or-unsupported-command-install [即卸载strawberry perl]

二、查看已经安装的python模块所在位置
在命令行下使用“where [模块名]”,如“where nosetests”。

三、提示“Python version 2.7 required, which was not found in the registry”
原因:安装的不是对应版本、对应位数的python,或者没有写入注册表,所以安装包无法识别python。
在这里插入图片描述
解决方法:
新建一个register.py文件,把以下代码贴进去,保存。

script to register Python 2.0 or later for use with win32all

and other extensions that require Python registry settings

written by Joakim Loew for Secret Labs AB / PythonWare

source:

http://www.pythonware.com/products/works/articles/regpy20.htm

modified by Valentine Gogichashvili as described in http://www.mail-archive.com/distutils-sig@python.org/msg10512.html

import sys

from _winreg import *

tweak as necessary

version = sys.version[:3]
installpath = sys.prefix

regpath = “SOFTWARE\Python\Pythoncore\%s\” % (version)
installkey = “InstallPath”
pythonkey = “PythonPath”
pythonpath = “%s;%s\Lib\;%s\DLLs\” % (
installpath, installpath, installpath
)

def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print “*** Unable to register!”
return
print “— Python”, version, “is now registered!”
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print “=== Python”, version, “is already registered!”
return
CloseKey(reg)
print “*** Unable to register!”
print “*** You probably have another Python installation!”

if name == “main”:
RegisterPy()

在命令行下切到register.py文件的目录,执行“python register.py”,将显示python已经注册!
在这里插入图片描述
然后可以再次运行安装包。

四、提示“‘easy_install‘不是内部或外部命令,也不是可运行的程序”
原因:easy_install程序的路径没有添加到系统环境变量中。
解决方法:
把对应的路径(python的Scripts目录路径)添加到环境变量的Path里,路径如“C:\Python27\Scripts”。

五、easy_install某个模块时,提示setuptools工具下载失败:“Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-0.9.6.tar.gz”;提示其他模块的,情况类似
原因:setuptools工具的下载地址错误,或者下载不下来
解决方法:
找到对应的下载路径,下载安装包后,先安装。然后再重新安装目的模块。
setuptools-0.9.6.tar.gz的下载地址是https://pypi.python.org/pypi/setuptools/0.9.6 。

2 编码、运行问题
一、提示“‘ascii’ codec can’t decode byte 0xe5 in position 27: ordinal not in range(128)”
原因:python的str默认是ascii编码,和unicode编码冲突
解决方法:
在代码中加入以下几句
import sys
reload(sys)
sys.setdefaultencoding(‘utf8’)

二、字典(dict)类型数据中含有中文,打印后显示十六进制数据(如\x8)
原因:编码问题,单独打印中文字段值可以正常显示,整体打印的时候不识别
解决方法:打印前将dict数据转换为json,如下
json.dumps(data, ensure_ascii=False)

三、连接mysql服务超时
原因:可能由于mysql服务器设置了域名解析
解决方法:
连接mysql数据库时,使用ip,不使用域名。对于其他服务的连接,同理。

四、含有中文的字符串,与期望的字符串内容相同,但是断言失败
原因:接口返回的汗含有中文的字符串,是Unicode编码的
解决方法:需要将字符串转换为utf-8编码,如下
在这里插入图片描述
不过,restful接口数据处理方法parse_response( )中已经添加了编码处理问题,如果有使用该方法,则在断言中无需再次转化。

五、url中的中文预处理
解决方法:使用python urllib库的quote( )方法,如下
在这里插入图片描述

3 每日构建的问题
一、批处理文件运行时,提示“no module named xxx”
原因: 没有安装脚本需要的python模块。特别是在脚本有更新的情况下,引用了新的模块,服务器上没有及时安装。
解决方法:安装对应的模块。

二、svn的update动作失败
原因:执行update的时候没有权限信息,或者权限信息过期。
解决方法:在checkout代码的时候,记住账号密码。若信息过期,再次输入并记住。

4 python代码书写规范
每一种语言都有各自风格的书写规范。虽然python代码的书写除了严格要求缩进之外,没有其他的强制规定,但是它还是有自己的书写风格。在使用PyCharm时,编译器会自动识别,在编译器代码区的右侧显示 – 黄色表示警告,红色表示语法错误;在代码中也会用波浪线标记出来。这里主要针对会导致黄色警告的情况,说明书写规范(对于有强迫症的coder比较有用)。

一、代码间隔过多/过少
规则:
1.类、外部方法与上一行代码的间隔应该是2行;
2.类内部的方法与上一行代码的间隔应该是1行;
3.等号两端各需要一个空格(缺省值的设置相反,不能有空格);
4.冒号后需要一个空格;
5.多余空白的行;
6.代码与后面同一行的注释之间,需要有两个以上空白符的间距;注释符号(“#”)与文字之间,需要有一个以上空白符的间距;

二、代码多余
规则:
1.没有被引用的库、变量会被标记;
2.类里面的方法没有用到self变量;
3.

(未完待续……)

python接口学习QQ交流群:864044398
以下是Pyhton接口测试相关的实战系列课:
https://ke.qq.com/course/442432?quicklink=1

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值