我的接口框架---框架函数文件common.php
<?php defined('JDHU') OR die('no allow access');
/**
* 加载配置文件
*/
function &get_config($replace = array())
{
static $config;
if (empty($config)) {
$file_path = APPPATH . 'config/config.php';
//如果不存存在正式配置,加载环境配置
if (!file_exists($file_path)) {
$file_path = APPPATH . 'config/'.ENVIRONMENT.'config.php';
}
require($file_path);
}
//替换配置文件中
foreach ($replace as $key => $value) {
$config[$key] = $value;
}
return $config;
}
/**
* 加载框架/应用类库
*/
function &load_class($class, $directory = 'libraries', $param = NULL)
{
static $_classes = array();
//如果类加载过了,返回类
if (isset($_classes[$class])) {
return $_classes[$class];
}
$name = FALSE;
//引入核心类
//首先查找应用,其次查找框架
//覆盖框架类文件:如果应用存在JDHU类,则不引入框架类
foreach (array(APPPATH, JDHU) as $path) {
if (file_exists($path.$directory.'/'.$class.'.php')) {
//核心类名
$name = 'JDHU_'.$class;
//备注:class_exists 第二个参数默认true,调用__autoload()函数
if (class_exists($name, FALSE) === FALSE) {
require_once($path.$directory.'/'.$class.'.php');
}
break;
}
}
//引入继承类:继承框架类或覆盖类
if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php')) {
//继承类名
$name = config_item('subclass_prefix').$class;
require_once(APPPATH.$directory.'/'.$name.'.php');
}
//获取被加载的类,记录已被加载
is_loaded($class);
//如果有参数,则带参数初始化类
$_classes[$class] = isset($param) ? new $name($param) : new $name();
return $_classes[$class];
}
/**
* 获取配置项
*/
function config_item($item)
{
static $_config;
if (empty($_config)) {
// 引用不能直接赋值给静态变量,可以赋值给静态变量数组
$_config[0] =& get_config();
}
return $_config[0][$item];
}
/**
* 获取被加载的类,如果有类名,记录已被加载
*/
function &is_loaded($class='')
{
static $_is_loaded = array();
if ($class) {
//类名
$_is_loaded[strtolower($class)] = $class;
}
return $_is_loaded;
}
/**
* 输出json错误并退出
*/
function die_error($message)
{
static $_response;
if ($_response === NULL) {
$_response[0] =& load_class('Response', 'core');
}
log_message('error', $message);
$_response[0]->die_error($message);
}
/**
* 记录日志
*/
function log_message($level, $message)
{
static $_log;
if ($_log === NULL) {
$_log[0] =& load_class('Log', 'core');
}
$_log[0]->write_log($level, $message);
}
/**
* 获取ip地址
*/
function ip_address()
{
static $_ip_address = '';
if ($_ip_address) {
return $_ip_address;
}
$_ip_address = $_SERVER('REMOTE_ADDR');
return $_ip_address;
}
/**
* 备注:function &xxx() 返回结果的指针地址
*/
?>
我的接口框架---框架函数文件common.php的更多相关文章
- 基于Java+HttpClient+TestNG的接口自动化测试框架(八)------ 针对文件的处理
在实际的接口测试中,有时需要根据情况进行文件的上传和下载.在文件数量比较小的时候,我们当然可以直接处理(比如若干个接口都用一个文件).但是,如果我们上传的文件需要使用不同文件夹里不同的文件,而且数量又 ...
- 转载:python + requests实现的接口自动化框架详细教程
转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...
- python+requests接口自动化测试框架实例详解教程
1.首先,我们先来理一下思路. 正常的接口测试流程是什么? 脑海里的反应是不是这样的: 确定测试接口的工具 —> 配置需要的接口参数 —> 进行测试 —> 检查测试结果(有的需要数据 ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- python + requests实现的接口自动化框架详细教程
前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...
- Android接口和框架学习
Android接口和框架学习 缩写: HAL:HardwareAbstraction Layer.硬件抽象层 CTS:CompatibilityTest Suite,兼容性測试套件 Android让你 ...
- python+request+HTMLTestRunner+unittest接口自动化测试框架
转自https://my.oschina.net/u/3041656/blog/820023 正在调研使用python进行自动化测试,在网上发现一篇比较好的博文,作者使用的是python3,但目前自己 ...
- 接口自动化测试框架-AIM2.0
跳转到3.0版本https://www.cnblogs.com/df888/p/12031649.html AIM是我用python搭建的第一款接口自动化测试框架,随着技术的提升,框架也在升级,故有了 ...
随机推荐
- ActiveMQ入门实例(转)
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- 键盘事件与JS Filter
今天在写一个JS输入文本过滤的程序,本来我的设想是在keypress事件中获取按下的键,然后再进行判断,这样的话总是出错,最后终于明白自己把事件的发生顺序搞错了,应该是先keydown,然后是keyp ...
- LabSharp莱博夏普简介
莱博夏普提供实验室信息化解决方案,为实验室提供LIMS系统建设方案咨询,并为中小型LIMS系统供应商提供系统解决方案咨询.
- svn 上传 过滤
代码上传过程中发现.so文件不能上传,查了一下,发现是svn服务器要设置上传过滤:很多文件,会被过滤掉,不能正常上传.设置如下: 通过终端打开配置文件: open ~/.subversion/conf ...
- Ubuntu vim+ ctags(包含系统函数) + taglist 配置 分类: vim ubuntu 2015-06-09 18:19 195人阅读 评论(0) 收藏
阅读大型代码,我们经常需要打开很多的代码文件,搜索各种定义.windows下用惯了ide的朋友,转战Linux的时候可能会觉得很难受,找不到合适的阅读工具.其实万能的vim就可以实现.下面介绍一下vi ...
- 关闭对话框,OnClose和OnCancel
我们知道,在对话框中,屏蔽ESC键自己主动退出能够选择重载OnCancel为哑函数的方法: void CXXXXDlg::OnCancel() { // TODO: Add ...
- java 集合排序(转)
Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...
- 应用Druid监控SQL语句的执行情况--转载
Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...
- ARCGIS获取图层下的要素信息及要素类转换为要素
/// <summary> /// 得到需要的字段名和字段值 /// </summary> /// <param name="layer">&l ...
- Android开发之使用意图调用内置应用程序
意图可以调用活动,也常被用来调用内置应用程序,如加载web页面,拨号页面,内置地图应用等等.下面就用例子来说明该用法. 效果图如下: 实现代码如下: 上图中的启动MyBrowser是用意图来调用MyW ...