我的接口框架---框架函数文件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搭建的第一款接口自动化测试框架,随着技术的提升,框架也在升级,故有了 ...
随机推荐
- LIS,LDS的另类算法(原)
自己在做有关俄罗斯套娃的题目时,发现自己写出的一个方法可以解决求最长上升子序列(LIS)和最长下降子序列(LDS)的问题. 俄罗斯套娃:这个问题在前一篇中讲的有,在此处就不多讲了~链接 求最长上升子 ...
- C#中A a=new B()的意义
A a=new B()的意义 前提:A是B的父类. A a = new B(); 或 A a; B b=new B(); a=b; 这一句的过程是这样的, 1)创建一个类A的引用a 2)创建一个类B的 ...
- PHP文件操作常用函数总结
一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. eg: $ ...
- C# 自定义事件
C#自定义事件和java有所不同,涉及到委托.下面代码包括自定义事件从事件定义到事件触发和执行的全过程. using System; using System.Collections.Generic; ...
- A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...
- request对象方法详解
自己整理的 javax.servlet.http.HttpServletrequest 所有方法,欢迎收藏! 方法名 说明 isUserInRole 判断认证后的用户是否属于某一成员组 getAttr ...
- oracle4
分页查询 按雇员的id号升序取出 oracle的分页一共有三种方式 .根据rowid来分 ) ) order by cid desc; 执行时间0.03秒 .按分析函数来分 and rk> ...
- the Linux Kernel: Traffic Control, Shaping and QoS
−Table of Contents Journey to the Center of the Linux Kernel: Traffic Control, Shaping and QoS 1 Int ...
- Android开发之TextView的下划线添加
如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.fin ...
- Android开发之设定Dialog的位置
今天自定义了一个对话框,但是弹出时默认是显示在屏幕中间.主要代码:menuDialog = new AlertDialog.Builder(this).create(); ...