TP里的case when用法。可以代替if判断

本文介绍了一种使用ThinkPHP框架进行复杂联表查询的方法,包括动态SQL构建及视图方式查询,涉及字段选择、条件过滤及结果排序等操作。
public functiondetail_jump(Request$request)
{
$name= $request->param('name');
$video_id= $request->param('id');

$sql="(select *,(case when picture_type = 'remote' then picture_url when picture_type = 'local' then picture_path else 'ww' end) pic_addr from tv_picture)";


$sql="SELECT v.*,p1.pic_addr as p1_pic,p2.pic_addr as p2_pic FROM tv_video AS v JOIN {$sql} AS p1 ON v.picture_id = p1.picture_id JOIN tv_cate AS c ON c.`cate_id` = v.`cate_plat_id` JOIN{$sql} AS p2 ON p2.`picture_id`
= c.`picture_id` WHERE video_id ={$video_id}";
$video_res= Db::query($sql);

j($video_res);
}

用TP查询器也可以写在field里面当做一个字段查询,示例如下

$sql = Db::view('video')
     ->view('picture',['picture_id' => 'pid','picture_url','picture_path'],'picture.picture_id = video.picture_id')
     ->view('vod',['vod_id' => 'vid','actor_ids'],'vod.vod_id = video.vod_id')
     ->where('video.vod_id','in',$hot_id)
     ->field("(case when picture_type = 'remote' then picture_url when picture_type = 'local' then picture_path else 'asd' end) picaddr")
     ->order('video_subname desc')
     ->buildSql();

$sql = "select * from {$sql} as v group by v.vod_id order by v.video_subname desc";

$hot_res =  Db::query($sql);

j($hot_res);

java.lang.NullPointerException at com.tplink.cloud.msgcenter.mq.InvalidateLocalCacheConsumerTest.testOnCacheInvalidate_Success(InvalidateLocalCacheConsumerTest.java:88) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Misplaced or misused argument matcher detected here: -> at com.tplink.cloud.msgcenter.mq.InvalidateLocalCacheConsumerTest.testOnCacheInvalidate_Success(InvalidateLocalCacheConsumerTest.java:88) -> at com.tplink.cloud.msgcenter.mq.InvalidateLocalCacheConsumerTest.testOnCacheInvalidate_Success(InvalidateLocalCacheConsumerTest.java:88) You cannot use argument matchers outside of verification or stubbing. Examples of correct usage of argument matchers: when(mock.get(anyInt())).thenReturn(null); doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject()); verify(mock).someMethod(contains("foo")) This message may appear after an NullPointerException if the last matcher is returning an object like any() but the stubbed method signature expect a primitive argument, in this case, use primitive alternatives. when(mock.get(any())); // bad use, will raise NPE when(mock.get(anyInt())); // correct usage use Also, this error might show up because you use argument matchers with methods that cannot be mocked. Following methods *cannot* be stubbed/verified: final/private/equals()/hashCode(). Mocking methods declared on non-public parent classes is not supported. 报错代码:when(MetricManager.INSTANCE.getOrRegisterLatency(any(), any())).thenReturn(latency);
10-21
syntax = "proto3"; option java_multiple_files = true; option java_package = "com.tplink.cdd.vms.manager.api.grpc"; import "common_dto.proto"; package manager.device; service DeviceOcApiService { rpc batchAddDevice (GrpcRequest) returns (GrpcResponse) { } rpc batchImportDeviceByFile (GrpcRequest) returns (GrpcResponse) { } rpc batchAddWrongPwdDevices (GrpcRequest) returns (GrpcResponse) { } rpc deleteDevice (GrpcRequest) returns (GrpcResponse) { } rpc editDevice (GrpcRequest) returns (GrpcResponse) { } rpc getDevicePage (GrpcRequest) returns (GrpcResponse) { } rpc ocSyncDevices (GrpcRequest) returns (GrpcResponse) { } rpc getDeviceDetail (GrpcRequest) returns (GrpcResponse) { } rpc passthrough (GrpcRequest) returns (GrpcResponse) { } rpc requestStream (GrpcRequest) returns (GrpcResponse) { } rpc batchDeleteDevice (GrpcRequest) returns (GrpcResponse) { } rpc activeDevice (GrpcRequest) returns (GrpcResponse) { } rpc unbindDevice (GrpcRequest) returns (GrpcResponse) { } rpc getBindLicense (GrpcRequest) returns (GrpcResponse) { } rpc getAvailableUsedLicensePage (GrpcRequest) returns (GrpcResponse) { } } service DeviceOmadaApiService { rpc getDeviceListForOmada (GrpcRequest) returns (GrpcResponse) { } rpc getDeviceListForTopology (GrpcRequest) returns (GrpcResponse) { } rpc getAllDeviceListForOmada (GrpcRequest) returns (GrpcResponse) { } rpc checkDeviceIpConfig (GrpcRequest) returns (GrpcResponse) { } }以上是grpc 部分proto代码,请仿照以下对常规调用的冒烟测试生成grpc的冒烟测试示例#!/usr/bin/env python # -*- coding: UTF-8 -*- import os from function.aio_guard.system_settings import query_aio_guard_system_configs, \ edit_aio_guard_system_configs from function.aio_guard.vms_org_mgmt import get_vms_id from test_cases.aio_guard import AioGuardBaseTestCase ''' 用例描述: 1、 2、 3、 ''' class MyTestCase(AioGuardBaseTestCase): def __init__(self): super().__init__() self.init_case_name_id(os.path.basename(__file__)) self.case_info.author = '' self.logger.info('start test: {}'.format(self.case_info.name)) self.session = self.get_session() self.vms_id = '' self.data = {} def pre_test(self): self.vms_id = get_vms_id(self.session) errorCode, message, result = query_aio_guard_system_configs( self.session, self.vms_id) self.check_result(errorCode, 0, '获取基本配置') self.check_result(message, 'success.', '获取基本配置') self.data = result def do_test(self): errorCode, message = edit_aio_guard_system_configs(self.session, self.vms_id, self.data) self.check_result(errorCode, 0, '修改基本配置') self.check_result(message, 'success.', '修改基本配置') def clean_test(self): pass if __name__ == "__main__": test = MyTestCase() try: test.pre_test() test.do_test() test.clean_test() except Exception as e: test.export_test_result_when_catch_exception(e) raise e else: test.export_test_result() import json from function.aio_guard.device_mgmt import * from config.aio_guard.environment import Env, env_region from function.aio_guard import get_response aio_server_host = Env[env_region].value['aio_server_address'] # 修改system configs def edit_aio_guard_system_configs(session, vms_id, data): url = aio_server_host + '/api/v1/vms/{0}/configs'.format(vms_id) response = session.put(url, json=data) return get_response(response) # 查询system configs def query_aio_guard_system_configs(session, vms_id): url = aio_server_host + '/api/v1/vms/{0}/configs'.format(vms_id) response = session.get(url) return get_response(response) def add_result(self, passfail, item_id, actual_result, expected_result, test_comment, bug_severity="", cf_problemanalysis="", cf_bugimpact=""): """ 收集结果信息,如果用例失败自动提交bug" :param passfail: PASS/FAIL :param item_id: 测试点信息 :param actual_result: 实际运行结果 :param expected_result: 预期运行结果 :param test_comment: 描述信息 :param bug_severity: (optional) bug重要等级 (blocker/critical/major/normal) :param cf_problemanalysis: (optional) bug分析 :param cf_bugimpact: (optional) bug影响 :return: None """ if passfail == self.result.FAIL: self.add_case_step("用例执行失败:预期值:{},实际值:{}".format(expected_result, actual_result)) else: # 单个测试点通过后,清空测试点步骤 self.case_steps = [] self.result.add_result(passfail=passfail, item_id=item_id, actual_result=actual_result, expected_result=expected_result, test_comment=test_comment) self.logger.debug('Add result item info:\"item_id\": {0}, \"passfail\": {1}, \"comment\": {2}, \"actual\": {3}, \"expected\": {4}'.format( item_id, passfail, test_comment, actual_result, expected_result )) self.passfail.append(passfail) def check_result(self, actual_result, expected_result, test_comment=''): if isinstance(expected_result, tuple): if actual_result in expected_result: result = self.result.PASS else: result = self.result.FAIL expected_result = str(expected_result) else: if actual_result == expected_result: result = self.result.PASS else: result = self.result.FAIL self.item_id += 1 self.add_result(passfail=result, item_id=self.item_id, actual_result=actual_result, expected_result=expected_result, test_comment=test_comment)
最新发布
11-21
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值