IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP脚本任务 - 复杂场景测试生产环境数据的解决办法 -> 正文阅读

[PHP知识库]PHP脚本任务 - 复杂场景测试生产环境数据的解决办法

概述

如果老板交给你一个业务很复杂的业务场景,并且要求你在测试环境测试生产环境的数据,你会怎么处理呢?

解决方案

解决方案1

第一个解决方案就是将实际生产环境需要的数据,先打印出需要的Sql语句,拼装,把Sql的查询结果放到以.csv文件的Excel表里加以处理。模拟出需要的数据暂存在脚本执行的数组里。

需要注意的是以下几个点:

  • 列名称要有序对应
  • 如果有表头,要删除掉表头
$list = [];
$mapKey = [
    'id', 
    'novel_id'
    //...
    ];

if (($handle = fopen("/home/work/www/testdb/listdb.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        for ($c = 0; $c < $num; $c++) {
            $key = $mapKey[$c];
            $arr[$key] = $data[$c];
        }
        $list[] = $arr;
        unset($arr);
    }
    fclose($handle);
}
//删除表头
array_shift($list);
$list = array_values($list);

如果是少量数据,之前的解决方案就可以解决问题,但如果数据多该怎么处理呢?

解决方案2

首先写一个导入程序,把需要的数据从Excel导入到Mysql的数据表中,考虑到要充分兼容之前的框架的类和方法。

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');

$reader->setReadDataOnly(TRUE);
$path = '/home/work/www/testdb/test_rec2.xlsx';
$spreadsheet = $reader->load($path); //载入excel表格

$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow(); // 总行数

$lines = $highestRow - 1;
if ($lines <= 0) {
    exit('Excel表格中没有数据');
}
$res = [];
$obj = ChangpeiModule_Cpwxw_Novel_ApplyRecommend::getInstance();

for ($row = 2; $row <= $highestRow; ++$row) {
    if(!$worksheet->getCellByColumnAndRow(1, $row)->getValue()) {
        continue;
    }

    $item = [
        'id' => (int)$worksheet->getCellByColumnAndRow(1, $row)->getValue(),
        //略...
    ];


    $lastId = $obj->add($item);
    echo 'lastId:'.$lastId.PHP_EOL;
}

把需要的数据,导入一张新建的表,表结构相同,为了避免把测试服数据弄乱,以test_开头,区别其他测试服的数据表,把正式服的数据导入,导入后检测数据。

在执行中新建了同样的表结构和Model类库,以Test文件夹区别同源数据,运用更灵活,效率更高。

$scriptStartTime = microtime(true);
ChangpeiModule_Test_Novel_ApplyRecommend::getInstance()->testWeeklyScreenScript();
$scriptEndTime = microtime(true);

$diff = $scriptEndTime - $scriptStartTime;
echo '榜单上榜脚本执行结束,执行时间'.$diff;

$scriptStartTime = microtime(true);
ChangpeiModule_Test_Novel_ApplyRecommend::getInstance()->testEndStateScript();
$scriptEndTime = microtime(true);
$diff = $scriptEndTime - $scriptStartTime;
echo '执行榜单任务完成结果..'.$diff;

在导数据的时候有几个注意的点,你导出的数据是否是你需要的数据,一般的脚本任务会互相依赖其他的数据,第二就是导入的Excel表格的路径,重复实验时还要清空数据表,在清空数据表的时候,一定要注意清空,在之前的实践中,一次是误删了测试服的用户表,一次是手误清空了数据表,操作时要严谨,要格外注意!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:41:54  更:2021-12-28 22:42:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:10:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码